设计模式<一>适配器模式

来源:互联网 发布:iphone7如何卸载软件 编辑:程序博客网 时间:2024/05/17 08:19

设计模式概述见:
http://blog.csdn.net/chijiandi/article/details/78839305

适配器模式的基本概念

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。
通俗地说就是两个相似功能的接口名字不一样而客户端需要他们名字一样。

什么时候使用适配器模式

当开发后期,两个功能相似的接口因为都不太容易改,或当调用别人类似功能的接口时,通过适配器模式返回客户端一致的接口。
使客户端能够统一地调用同一接口。

适配器模式怎么用

在前面提了,适配器模式使为了要给客户端一个一致的接口产生的。
也提过是因为两个接口都已经完善而不太容易修改的情况下才会使用适配器模式。
以下举一个例子来展示:
比如现在有一个将中文的中国人的类:

** * @ClassName: Chinese  * @Description: 中国人讲中文 * @author cjd * @date 20171216日 上午11:20:53    */  public class Chinese {      protected void sayChinese() {          System.out.println("say Chinese");      }  }  

还有一个讲英语的外国人的类:

/** * @ClassName: English  * @Description: 外国人讲英语 * @author cjd * @date 2017年12月16日 上午11:20:59    */  public class English{      protected void sayEnglish() {          System.out.println("say English");      }  }  

他们的功能其实是一致的,都是说,可是客户端需要分别通过sayChinese和sayEnglish来对他们进行分别的调用。
那么我们就需要一个适配器:翻译 来对他们进行转换。
所以我们需要创建一个翻译的类:

/** * @ClassName: Translator  * @Description: 翻译类 * @author cjd * @date 2017年12月16日 上午11:25:36    */  public class Translator {      English english;      public Translator(English english) {          this.english=english;      }      public void sayChinese() {          english.sayEnglish();      }  }  

在其中封装了讲英语的外国人。那么我们只需要知道翻译就可以将sayEnglish翻译成sayChinese
那样在客户端中的调用只需要这样:

/** * @ClassName: Main  * @Description: 主函数调用 * @author cjd * @date 2017年12月16日 上午11:26:48    */  public class Main {      public static void main(String[] args) {      Chinese chinese = new Chinese();          Translator translator = new Translator(new English());          chinese.sayChinese();          translator.sayChinese();      }  }  

此时,客户端使用的时候,只需要知道这是一个说中文的方法即可。

后续

适配器模式的使用确实很方便,但是如果可以,在设计初期就预防了命名的规范问题,在发生这些问题之前杜绝发生,就不会用到适配器模式。
初学设计模式,如有理解错误,感谢指出!