讀之適配器模式


        其實我感覺這個模式是最簡單的一個設計模式了,看着名字可能不明白,其原來就是一個接口。比如電腦的USB接口,內部不管外部插得什麼設備只要連接USB,內部都能接收到信號,原因就是兩設備之間多了個橋樑------USB。

       適配器模式:將一個類的接口轉換成客戶希望的另一個接口。它使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

      <<大話設計模式>>是以NBA球員在外國培訓不懂外語,而需要翻譯者來幫其翻譯,那這個翻譯者就是接口了。好囉嗦啊,還是用代碼解釋一切,因爲程序員就是活在代碼的世界裏。

 

1、運動員抽象類

/**

 * @author jzhf 

 * 2014-11-05

 */

public abstract class Player {

 

   public String name;

 

   public abstract void attack();//進攻

   public abstract void defense();//防守

  

   public String getName() {

      return name;

   }

 

   public void setName(String name) {

      this.name = name;

   }

}

2、前鋒類

public class Forward extends Player {

 

   public Forward(String name){

      super.name = name;

   }

  

   /* (non-Javadoc)

    * @seecom.test.model.adapter.Player#attack()

    */

   @Override

   public void attack() {

      // TODO Auto-generatedmethod stub

 

      System.out.println(name+"前鋒攻擊");

   }

 

   /* (non-Javadoc)

    * @seecom.test.model.adapter.Player#defense()

    */

   @Override

   public void defense() {

      // TODO Auto-generatedmethod stub

 

      System.out.println(name+"前鋒防守");

   }

 

}

3、防守類

/**

 * @author jzhf 

 * 2014-11-05

 * 注意不再繼承player類,因爲需要翻譯

 */

public class ForeignCenter{

 

   public String name;

  

   public void attack() {

      // TODO Auto-generatedmethod stub

 

      System.out.println(name+"外籍中鋒攻擊");

   }

 

   public void defense() {

      // TODO Auto-generatedmethod stub

 

      System.out.println(name+"外籍中鋒防守");

   }

 

   public String getName() {

      return name;

   }

 

   public void setName(String name) {

      this.name = name;

   }

 

}

4、翻譯者類

/**

 * @author jzhf 

 * 2014-11-05

 * 翻譯者作爲player與外籍隊員的接口,所以翻譯者應該繼承player,但是執行的動作還是外籍球員的動作

 */

public class Translator extends Player {

 

  

   private ForeignCenter center = new ForeignCenter();

  

   public Translator(String name){

      center.setName(name);

   }

  

   /* (non-Javadoc)

    * @seecom.test.model.adapter.Player#attack()

    */

   @Override

   public void attack() {

      // TODO Auto-generatedmethod stub

 

      center.attack();

   }

 

   /* (non-Javadoc)

    * @seecom.test.model.adapter.Player#defense()

    */

   @Override

   public void defense() {

      // TODO Auto-generatedmethod stub

 

      center.defense();

   }

 

}

5、客戶端

public class AdapterClient {

 

   /**

    * @param args

    */

   public static void main(String[] args) {

      // TODO Auto-generatedmethod stub

 

      Player player1 = new Forward("巴蒂爾");

      player1.attack();

      player1.defense();

     

      Player player2 = new Translator("姚明");

      player2.attack();

      player2.defense();

   }

 

}

 

        翻譯者就是外國語姚明的中間人,爲了讓姚明聽懂外語就需要這樣的接口還適應外國的環境。這就是適配器模式,簡單吧!

總結:適配器模式簡單的說就是需要的東西就在面前,但卻不能使用,而短時間又無法改造它,於是我們就想辦法適配它。當我們使用一個已經存在的類,但如果它的接口,也就是它的方法和你的要求不相同時,就應該考慮用適配器模式了。

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