博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构型模式之Adapter模式
阅读量:7247 次
发布时间:2019-06-29

本文共 1713 字,大约阅读时间需要 5 分钟。

适配器模式把一个类的接口变换成客户端所期待的另一种接口。

在JDK中的体现

把一个接口或类变成另外一种。

java.util.Arrays#asList()

javax.swing.JTable(TableModel)
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)
javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()

参与角色

目标角色(Target): 定义Client使用的与特定领域相关的接口,即期待得到的接口。

客户角色(Client):与符合Target接口的对象协同。
被适配橘色(Adaptee):定义一个已经存在并已经使用的接口,这个接口需要被适配。
适配器角色(Adapte):适配器模式的核心。
它将对被适配Adaptee角色已有的接口转换为目标角色Target匹配的接口,对Adaptee的接口与Target接口进行适配.

适配器模式实例

 

/** * 所期待得到的接口 */public interface Target {	/**类似中国的电源接口*/	public void expectMethod();}

  

/** * 需要被适配的接口,类似国外的电源接口 */public class Adaptee {	/**德国电源插口*/	public void notMatchMethod(){		System.out.println("这是待适配的德国电源插口__");	}}

  

1.类适配器模式

/** * 类适配器模式 * 适配器角色Adapter扩展了Adaptee,同时又实现了目标(Target)接口。 */public class Adapter1 extends Adaptee implements Target{	@Override	public void expectMethod() {		//可以调用Adaptee的方法做适当修改		notMatchMethod();		System.out.println("在适配器中实现期待的方法");	}}

  

Adapter与Adaptee是继承关系

用一个具体的Adapter类和Target进行匹配。结果是当我们想要一个匹配一个类以及所有它的子类时,类Adapter将不能胜任工作
使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子集
仅仅引入一个对象,并不需要额外的指针以间接取得adaptee

 

2.对象适配器模式

/** * 对象适配器模式 * 通过对象的委托实现 */public class Adapter2 {		private Adaptee adaptee;		public Adapter2(Adaptee adaptee){		this.adaptee=adaptee;	}		public void notMatchMethod(){		//		this.adaptee.notMatchMethod();	}		public void expectMethod(){		//需要的接口		System.out.println("在适配器中实现期待的方法");	}}

  

Adapter与Adaptee是委托关系

允许一个Adapter与多个Adaptee同时工作。Adapter也可以一次给所有的Adaptee添加功能
使用重定义Adaptee的行为比较困难
无论哪种适配器,宗旨都是:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。
即在不改变原有系统的基础上,提供新的接口服务。

适用场景

使用一个已经存在的类,而它的接口不符合你的需求,

创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

 

转载地址:http://qynbm.baihongyu.com/

你可能感兴趣的文章
iops计算详解
查看>>
Android编译报R.java报不到的错误解决办法
查看>>
CentOS5.x下安装配置FTP服务器
查看>>
正则数量词及非捕获
查看>>
MPLS 配置步骤
查看>>
Exchange Server 2007灾难恢复(AD+Ex)
查看>>
GRUB2
查看>>
Go性能优化技巧 1/10
查看>>
DNS 域名解析服务器---案例详解
查看>>
疑似电信版GALAXY S4现身官网 或配八核处理器
查看>>
我的Linux生涯之系统语言环境及中文输入法的操作
查看>>
c#获取当前页面名字
查看>>
客户端自动化技术漫谈
查看>>
mysql 优化之 查询
查看>>
TCP协议中的三次握手和四次挥手(图解)
查看>>
YII assets使用
查看>>
未来已来——工作空间 WorkSpace 和物联网 IoT (2)
查看>>
从零开始玩人工智能-机器人服务-05
查看>>
Google API V2申请及Google Map简单应用例子
查看>>
CXF开发WebService客户端
查看>>