文章参考于《设计模式的艺术之道》——刘伟
定义:将一个方法或者方法的集合转换成客户希望的另一个方法或者方法的集合。就如同日常生活中的电源适配器,需要将220V电压转变为需要的电压值。
主要有:对象适配器模式、类适配器模式、缺省适配器模式
Target(目标类):客户调用的方法,可以是接口或抽象类、也可以是具体类。
Adapter(适配器类):对特定的Target和特定的Adaptee进行适配。
Adaptee(适配者类):客户真正需要调用的业务方法。
① 对象适配器模式(适配器与适配者是关联关系)
/*
对象适配器模式,使用频率更加高。
类似于这样的委派形式。
*/
class Adapter extends Target {
private Adaptee adapatee;
public Adapter(Adaptee adapatee){
this.adapatee = adapatee;
}
public void request(){
adapatee.sourceRequest();
}
}
class Adaptee{
public void sourceRequest(){
System.out.println("这才是客户想要调用的方法");
}
}
class Target {
//客户方法的接口
public void request(){};
}
②类适配器模式(适配器与适配者是继承关系)
③缺省适配器模式
典型就是Java的GUI中,添加事件处理的过程中广泛使用。通过继承适配器类,来尽量减少无需的方法编写。
总结的说就是,父类中进行空实现,然后子类继承父类,子类中只需要覆盖父类自己想要的方法,而不需要实现父类的全部方法。
对象适配器模式相比于类适配器模式,前者多出的优点
1、一个适配器可以把多个不同的适配者适配到同一个目标。
2、由于适配器和适配者是关联关系(委派关系),根据里氏代换原则,适配器的子类也可以通过同一个适配器进行适配。
使用场景
1、一般用在项目后期增添或者修改功能。
2、系统需要使用一些现有的类,但是类的接口不符合系统的需要,甚至没有源代码。