一、Adapter 适配器模式
Target 表示客户需要的接口。
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的类可以一起工作。
适配器在我们生活中随处可见,就拿我们常用的电子设备笔记本电脑来说,笔记本需要使用的是直流电源,而我们生活中的电都是交流电,这个时候就需要使用电源适配器将交流电转换为直流电,这就是适配器模式的使用。
适配器模式可以分为两种情况:
1、类适配器模式,使用继承实现的适配器。
2、对象适配器模式,使用委托实现的适配器。
二、类适配器模式
Adaptee 表示目前需要适配的类。
Adapter 表示将Adaptee适配为Target的适配器。
2.1 Target接口
/**客户期待的接口
* Created by Administrator on 2017/4/26 0026.
*/
public interface Target {
void newCharge();
}
2.2 Adaptee类
/**现有类,也即需要适配的类
* Created by Administrator on 2017/4/26 0026.
*/
public class Adaptee {
public void charge(){
System.out.println("电器用电中");
}
}
2.3 Adapter适配器
/**适配器
* Created by Administrator on 2017/4/26 0026.
*/
public class Adapter extends Adaptee implements Target {
@Override
public void newCharge() {
charge();
}
}
2.4 测试方法
public static void main(String[] args) {
Target target = new Adapter();
target.newCharge();
}
使用类继承的方式是有局限性的,因为java是不支持多继承,如果使用了继承方式,类的扩展性就大大降低,所以建议使用下面对象适配的方式。
三、对象适配器
ModelAdapter 表示对象适配器,其它的均和类适配器相同。
3.1 ModelAdapter
/**
* Created by Administrator on 2017/4/26 0026.
*/
public class ModelAdapter implements Target {
private Adaptee adaptee;
public ModelAdapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void newCharge() {
adaptee.charge();
}
}
从上述代码中我们可以看到,适配器中保存了一个被适配的对象,通过被适配的对象的方法来实现我们的目标方法。
四、适配器模式的使用
通常情况下,被适配的类是以及经过广泛使用的类,如果我们现在需要新的接口,而且用到原来类的方法时,这个时候就可以使用适配器模式。
当然,有的时候我们可以通过修改现有类的方式来达到我们的目标,但大部分情况下,现有类使用比较广泛,在很多应用中都使用,如果我们修改了现有类,就会造成应用的不兼容,这个时候就要考虑使用适配器模式了。