Java類關係之代理(代理模式)

sust_ly發表於2018-08-02

在Java中,如果一個類需要使用另一個類的方法,我們可以使用繼承的方式實現,那麼問題來了,如果這個類恰恰在邏輯關係上不能使用繼承怎麼辦呢?比如說,飛機和控制檯這兩個類,控制檯的方法有上下左右前進後退,飛機需要使用控制檯的方法,使用繼承合適嗎?很顯然,這樣是不合理的。

這時候,我們可以用飛機這個類來代理控制檯這個類,啥意思呢?

貼上程式碼就明白了!

控制檯類:
public class PlaneContral {
    public void up(int v){
        System.out.println("飛機以"+v+"km/h的速度上升");
    }
    public void down(int v){
        System.out.println("飛機以"+v+"km/h的速度下降");
    }
    public void forward(int v){
        System.out.println("飛機以"+v+"km/h的速度前進");
    }
    public void back(int v){
        System.out.println("飛機以"+v+"km/h的速度後退");
    }
    public void left(int v){
        System.out.println("飛機以"+v+"km/h的速度左轉");
    }
    public void right(int v){
        System.out.println("飛機以"+v+"km/h的速度右轉");
    }
}
 

飛機類:


public class Plane {
    private PlaneContral pc = new PlaneContral();
    
    public void up(int v){
        pc.up(v);
    }
    public void down(int v){
        pc.down(v);
    }
    public void forward(int v){
        pc.forward(v);
    }
    public void back(int v){
        pc.back(v);
    }
    public void left(int v){
        pc.left(v);
    }
    public void right(int v){
        pc.right(v);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Plane p = new Plane();
        p.forward(200);
        p.back(100);
    }

}

就是在飛機這個類的成員變數中例項化一個控制檯的物件,再用飛機類的方法來代理控制檯的方法。

相關文章