现在的位置: 首页 > 综合 > 正文

<十三>读<<大话设计模式>>之适配器模式

2018年05月24日 ⁄ 综合 ⁄ 共 2408字 ⁄ 字号 评论关闭

        其实我感觉这个模式是最简单的一个设计模式了,看着名字可能不明白,其原来就是一个接口。比如电脑的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();

   }

 

}

 

        翻译者就是外国语姚明的中间人,为了让姚明听懂外语就需要这样的接口还适应外国的环境。这就是适配器模式,简单吧!

总结:适配器模式简单的说就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它。当我们使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式了。

抱歉!评论已关闭.