博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式
阅读量:4100 次
发布时间:2019-05-25

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

一、适配器模式:将一个的接口转换成客户端希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作(类似我们的转换头)

二、模式中的角色:

(1)目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口

(2)需要适配的类:需要适配的类或适配者类

(3)适配器:通过包装一个需要适配的对象,把原接口转化为目标接口

三、实现方式:(1)类的适配器模式(采用继承实现)(2)对象适配器模式(采用对象组合方式实现)

(1)类适配器模式

类图:

//已经存在的但是1不符合标准接口的类class Adaptee{	public void specificRequest() {		System.out.println("被适配类,具有特殊功能。。。");	}}//目标接口,或称为标准接口interface Target{	public void request();}//具体目标类,只提供普通功能class ConcreteTarget implements Target{	public void request() {		System.out.println("普通类,具有普通功能。。。");	}}//适配器类,继承了被适配类,同时实现标准接口class Adapter extends Adaptee implements Target{	@Override	public void request() {		// TODO 自动生成的方法存根		super.specificRequest();	}	}public class AdapterDemo {	public static void main(String[] args) {		// TODO 自动生成的方法存根		//使用普通功能类		Target concreteTarget = new ConcreteTarget();		concreteTarget.request();				//使用特殊功能类,即适配类		Target adapter = new Adapter();		adapter.request();	}}

(2)对象适配器模式

类图:

//适配器类,直接关联被适配器类,同时实现标准接口class Adapter0 implements Target{	//直接关联被适配类	private Adaptee adaptee;	//可以通过构造函数传入具体需要适配的被适配类对象	public Adapter0(Adaptee adaptee) {		this.adaptee = adaptee;	}	@Override	public void request() {		// TODO 自动生成的方法存根		//这里使用委托的方式完成特殊功能		this.adaptee.specificRequest();	}}public class AdapterDemoAnother {	public static void main(String[] args) {		// TODO 自动生成的方法存根		//使用普通功能类		Target concreteTarget = new ConcreteTarget();		concreteTarget.request();				//使用特殊功能类,即适配器		//需要创建一个被适配类的对象作为参数		Target adapter = new Adapter0(new Adaptee());		adapter.request();			}}

四、适配器的好处:

(1)这样更简单,更直接,更紧凑

(2)复用了现存的类,解决了现存类和复用环境要求不一致的问题

(3)将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码

缺点:更换适配器的过程比较复杂

你可能感兴趣的文章
PHP 7 的五大新特性
查看>>
php实现socket(转)
查看>>
PHP底层的运行机制与原理
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
PHP7新特性 What will be in PHP 7/PHPNG
查看>>
比较strtr, str_replace和preg_replace三个函数的效率
查看>>
ubuntu 下编译PHP5.5.7问题:configure: error: freetype.h not found.
查看>>
PHP编译configure时常见错误 debian centos
查看>>
configure: error: Please reinstall the BZip2 distribution
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
【增强学习在无人驾驶中的应用】
查看>>
《python+opencv实践》四、图像特征提取与描述——29理解图像特征
查看>>
《python+opencv实践》四、图像特征提取与描述——30Harris 角点检测
查看>>
《python+opencv实践》四、图像特征提取与描述——31 Shi-Tomasi 角点检测& 适合于跟踪的图像特征
查看>>
OpenCV meanshift目标跟踪总结
查看>>
人工神经网络——神经元模型介绍
查看>>
人工神经网络——感知器介绍
查看>>
人工神经网络——反向传播算法(BackPropagation)
查看>>