结构型之适配器模式

2021-01-31  本文已影响0人  FisherTige_f2ef

适配器模式(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(); 

         }

}

缺省适配器模式:(略)

上一篇下一篇

猜你喜欢

热点阅读