结构型-适配器模式(Adapter)

介绍

适配器模式是一种结构型设计模式 它能使接口不兼容的对象能够相互合作

适配器设计模式

真实世界类比

适配器模式的示例

出国旅行前后的旅行箱

如果你是第一次从美国到欧洲旅行 那么在给笔记本充电时可能会大吃一惊 不同国家的电源插头和插座标准不同 美国插头和德国插座不匹配 同时提供美国标准插座和欧洲标准插头的电源适配器可以解决你的难题

适配器模式示例:

我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。默认情况下,AudioPlayer 可以播放 mp3 格式的音频文件。

我们还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。该类可以播放 vlc 和 mp4 格式的文件。

我们想要让 AudioPlayer 播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。

AudioPlayer 使用适配器类 MediaAdapter 传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo 类使用 AudioPlayer 类来播放各种格式。

 对外暴露play方法,通过MediaAdapter适配器类将AdvancedMediaPlaper下的实现类包起来,play方法内部除了Vlc、MP4还可以有MP3等。

 

 

 

 

 

在 Java 中使用模式

识别方法 适配器可以通过以不同抽象或接口类型实例为参数的构造函数来识别 当适配器的任何方法被调用时 它会将参数转换为合适的格式 然后将调用定向到其封装对象中的一个或多个方法

1、java.util.Arrays#asList()

2、java.util.Collections#list()

3、java.util.Collections#enumeration()

4、java.io.InputStreamReader(InputStream) (返回 Reader对象

5、java.io.OutputStreamWriter(OutputStream) (返回 Writer对象

6、javax.xml.bind.annotation.adapters.XmlAdapter#marshal() 和 #unmarshal()

 

  

 转:https://refactoring.guru/

 转:https://www.runoob.com/design-pattern/adapter-pattern.html

 

posted @ 2020-11-23 15:10  fangyanr  阅读(156)  评论(0编辑  收藏  举报