结构型之适配器模式
适配器模式(Adapter Pattern)
是指使接口不兼容的类,转化为目标接口兼容的类,像目标类一样工作的模式。
适配器模式的构成
目标接口or抽象类(Target):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
适配器类(Adapter):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,它通过继承Target(或者把Target作为内部属性new出来使用)并关联一个Adaptee对象使二者产生联系。
需要进行适配的类(Adaptee):它拥有一个已经存在的接口,这个接口需要适配成目标接口(Target)的使用方式。
适配器的类型
类适配器模式:通过一个适配器类(adapter),实现 Target 接口,同时继承了 Adaptee 类,然后在实现的Target 接口方法中调用 Adaptee 类的接口方法
对象适配器模式:类比与类适配器,对象适配器与类适配器不同之处在于,类适配器通过继承来完成适配,对象适配器则是通过属性关联(把对象创建出来作为一个属性来使用)来完成
缺省适配器模式:当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所有方法的情况。
优点:
1、将目标类和适配者类解耦;2、灵活性和扩展性非常好,可以让任何两个没有关联的类一起运行;3、提高了复用性
缺点:
1、过多地使用适配器,会让系统非常零乱
应用场景:
适配器不是在详细设计时添加的,而是解决已经存在项目的问题,为接口做折衷的适配。例如,需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码,如Android的adapter类
实现:
目标接口or抽象类(Target)
public interface Target {
void doTarget();
}
需要进行适配的类(Adaptee)
public class Adaptee {
public void doSomething() {
}
}
类适配器模式
public class Adapter extends Adaptee implements Target{
@Override
public void doTarget() {
super.doSomething();
}
}
对象适配器模式
public class Adapter extends Adaptee implements Target{
private Adaptee adaptee=new Adaptee()
@Override
public void doTarget() {
adaptee.doSomething();
}
}
缺省适配器模式:(略)