什么叫适配器模式?将一个接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
该模式主要用于希望复用一些现存的类(这些类的数据和行为都正确,但接口不符)。
适配器模式结构图
现在举个例子,公司派了个技术大牛去美国一个公司参加技术交流会,技术大牛只会哑巴英语,表示计算机专业英语听起来很吃力。主办方很贴心,给大牛配了个翻译。在这个例子中,美国技术专家们讲解知识相当于需要适配的接口,这里翻译就相当于适配器,将英语翻译成中文以便我们公司的大牛可理解就相当于客户所希望的接口。
下面是Java代码实现
这是我们希望转化成的接口
1 //客户所希望的接口,可以是具体的或抽象类,也可以是一个接口 2 abstract class Target{ 3 //讲解 4 public abstract void interpret(); 5 }
美国技术专家balabala
1 //需要适配的类(美国专家讲解技术知识) 2 class Adaptee { 3 //讲解内容 4 private String content ="Speak English"; 5 6 public Adaptee(String content){ 7 this.content = content; 8 } 9 10 public void specialInterpret() { 11 System.out.println(content); 12 } 13 14 }
翻译来啦
1 //适配器(翻译) 2 class Adapter extends Target{ 3 4 private String content = "我是美国技术专家,讲解balabala"; 5 public Adaptee adaptee = new Adaptee(content);//建立一个Adaptee,包装成我们所希望的样子 6 @Override 7 public void interpret() {//表面上调用interpret(),实际上specialInterpret() 8 adaptee.specialInterpret(); 9 } 10 11 }
客户端测试代码:
1 public class AdapterTest { 2 public static void main(String[] args) { 3 Target target = new Adapter(); 4 target.interpret();//对于客户端来说调用的就是target的interpret() 5 } 6 7 }
看一下运行结果
小结:适配器模式主要用于有现成的类和接口,但接口并不能直接拿来用,且又不能立马改掉的情况。通过适配器转换成我们所希望的接口,实现代码复用。