设计模式之适配器模式

类适配器

类适配器模式结构类图

这种适配方式,由以下几个角色组成:
(1)目标(Target)角色:这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。
(2)源(Adapee)角色:现在需要适配的接口。
(3)适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

对象适配器

对象适配器模式的结构类图

在对象适配器模式结构图中包含如下几个角色:
Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

(1)类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
(2)对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个包装类,持有原类的一个实例,在包装类的方法中,调用实例的方法就行。

接口适配器(缺省适配器)

接口适配器模式结构类图

在缺省适配器模式中,包含如下三个角色:
ServiceInterface(适配者接口):它是一个接口,通常在该接口中声明了大量的方法。
AbstractServiceClass(缺省适配器类):它是缺省适配器模式的核心类,使用空方法的形式实现了在 ServiceInterface 接口中声明的方法。通常将它定义为抽象类,因为对它进行实例化没有任何意义。
ConcreteServiceClass(具体业务类):它是缺省适配器类的子类,在没有引入适配器之前,它需要实现适配者接口,因此需要实现在适配者接口中定义的所有方法,而对于一些无须使用的方法也不得不提供空实现。在有了缺省适配器之后,可以直接继承该适配器类,根据需要有选择性地覆盖在适配器类中定义的方法。

应用场景

类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper 类,持有原类的一个实例,在Wrapper 类的方法中,调用实例的方法就行。
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。

案例

手机充电需要5伏电压,可是电源输出电压为220伏,所以手机充电需要一个适配器
用适配器模式完成此案例


类适配器模式案例

注意
1、VoltageAdapeer需要继承Voltage220V并实现Voltage5V的接口
2、Phone需要得到Voltage5V接口但传入的是VoltageAdapeer

对象适配器模式案例

注意
1、VoltageAdapeer类将不是继承Voltage220V而是聚合Voltage220V类
2、VoltageAdapeer类实现Voltage5V的接口
2、Client需要Voltage220V类的实例,得到Voltage220V类

接口适配器模式案例

注意
AbsAdapter需要时一个抽象类需要实现接口的所有方法,但需要默认实现即空实现,函数内部不做处理,交给A类去实现

你可能感兴趣的:(设计模式之适配器模式)