什么是适配器模式?
在生活中,讲汉语的和讲英语的不能相互理解,他们中间需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,同样的,在代码开发过程中两个互不兼容的接口要在一起工作,也需要一个适配器。
适配器的定义
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
在讲解适配器的结构时,我们先来看一个例子:
电源交流100v与电脑需要的直流12v不匹配,需要通过一个AC适配器进行电流的转换。
适配器的结构
- 适配器(Adapter):连接目标和源的中间对象,相当于AC转换器。
- 源/被适配(Adaptee):需要被适配的对象或类型,相当于电源
- 目标(Target):期待得到的目标,相当于电脑
适配器模式有两种:类适配器模式和对象适配器模式
类适配器模式
源/被适配:—》电源
public class Electric{
private String alternating;//交流电120V
public Electric(){
this.alternating= "120V";
}
public String printAlternating(){
return alternating;
}
}
目标:—》电脑
public interface Computer {
abstract void needDirect();//需要的电压:直流电 12v
}
AC适配器
/*ElectionAdapter实现了Computer 接口意味着它继承了Computer 需要12V这个需求,
同时extends Electric也意味着它拥有了Electric的方法,
通过ElectionAdapter 适配器把Electric 和Computer 连接起来,使得它们能在一起工作*/
public class ElectionAdapter extends Electric implements Computer {
public ElectionAdapter() {
super();
}
@Override
public void needDirect() {
String s = super.printAlternating();
s="12V";
System.out.println("交流电:"+s);
}
}
对象适配器模式,也叫做委托适配器,委托这个词太过于正式,说通俗点就是”交给其他人做事“,例如:今天早上睡过头了,没起来上课,刚好老师要进行签到,这时候你就可以委托你的好基友/好闺蜜来帮你签到,在我们这个案例中就是:源/被适配(Adaptee) 就是 Electric(电源)它将自己的某个方法委托个某个实例对象来调用
源/被适配:—》电源
public class Electric{
private String alternating;//交流电120V
public Electric(){
this.alternating= "120V";
}
public String printAlternating(){
return alternating;
}
}
目标:—》电脑
public interface Computer {
abstract void needDirect();//需要的电压:直流电 12v
}
AC适配器
public class ElectionAdapter extends Computer {
Electric electric;//由这个对象来调用Electric类的printAlternating方法
public ElectionAdapter( Electric electric){
this.electric= electric;
}
@Override
public void needDirect() {
String s = electric.printAlternating();
s="12v";
System.out.println("直流电:"+s);
}
}
看到这里,相信你一定对适配器模式有所了解了吧。那么接下来
什么时候使用适配器模式呢?
- 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
- 想建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
- 需要一个统一的输出接口,而输入端的类型不可预知。