咸鱼程序员之-java设计模式第八篇-适配器模式

适配器模式(Adapter Pattern):又叫包装模式或者是变压器模式,它将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

其实设计模式最早是应用在建筑领域的 ,java引用了这一个概念,简单点说,他的思路就是将一个两个原本步兼容的类或者接口组合成一个可以兼容的接口。。。。那么一般官方的官方变压器模式怎么实现的呢。他一般有三个角色:

适配器的三种角色
Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。

Adapter(适配器类):适配器可以调用另一个接口,作为一个包装器,对Adaptee和Target进行适配,Adapter是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。

Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

适配器的两种类型

1.对象适配器(通过构造方法将适配者传入)

咸鱼程序员之-java设计模式第八篇-适配器模式

咸鱼程序员之-java设计模式第八篇-适配器模式

咸鱼程序员之-java设计模式第八篇-适配器模式

这种方式就是通过构造器传入adaptee,然后做包装 推荐使用。。。

2.类适配器模式(通过继承适配者来包装)

咸鱼程序员之-java设计模式第八篇-适配器模式

咸鱼程序员之-java设计模式第八篇-适配器模式

这有一个不太友好的地方:

咸鱼程序员之-java设计模式第八篇-适配器模式

目标适配器可能不需要知道适配者的方法 。不符合java的开闭原则和单一职责原则。。。

下面我们看看spring和jdk源码中怎么去做适配器的

咸鱼程序员之-java设计模式第八篇-适配器模式

 

通过SimpleApplicationEventMulticaster实现这个listener

咸鱼程序员之-java设计模式第八篇-适配器模式

他的父类有个方法叫做getApplicationListeners

咸鱼程序员之-java设计模式第八篇-适配器模式

其中有个方法:supportsEvent里面就用到了adpter。。。。。

咸鱼程序员之-java设计模式第八篇-适配器模式

点进去这个new GenericApplicationListenerAdapter

咸鱼程序员之-java设计模式第八篇-适配器模式

 

可以发现这是一个典型的对象适配器模式。。。。。。

JDK中也有类似的适配器模式:

咸鱼程序员之-java设计模式第八篇-适配器模式

可以发现aslist中用的也是对象适配器模式。。。。。

okay 小编今天的分享就到这里了,希望对您有所帮助

总结:推荐使用对象适配器模式。。。。。