《JAVA編程思想》中的代理

有一個SpaceShip(飛船)類和一個SpaceShipControls(飛船控制)類,如果SpaceShip類想要獲得SpaceShipControls類的方法,你的第一反應是什麼?第一反應可能是用繼承。這樣當然可以,先看一眼代碼。

public class SpaceShipControls {
     void fly(){};
     void surrender(){};//投降
}

public class SpaceShip extends SpaceShipControls 
{
    public static void main(String[] args) 
    {
        SpaceShip ss=new SpaceShip();
        ss.fly();
    }

}

這段代碼無比簡單,SpaceShip 類現在獲得了SpaceShipControls 的fly()方法,現在可以起飛,可是我根本就不想讓它投降啊,所以我們要有選擇的的讓他繼承(前提已經說好這是兩個普通類而沒有抽象類)。
再看代碼


public class SpaceShipDelegation {

   private SpaceShipControls ssc=new SpaceShipControls();

   public  void fly()
   {
       ssc.fly();
   }
}

public class SpaceShip extends SpaceShipDelegation {

    public static void main(String[] args) 
    {
        SpaceShip ss=new SpaceShip();
        ss.fly();
    }

}

SpaceShip 繼承的是SpaceShipDelegation ,這下子SpaceShip 既可以飛,又不能投降了,在書中有這麼一句話“我們使用代理時可以擁有更多的控制力,因爲我們可以選擇只提供在成員對象中的方法的子集”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章