前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >适配器模式

适配器模式

作者头像
xiangzhihong
发布2018-02-05 10:46:05
4660
发布2018-02-05 10:46:05
举报
文章被收录于专栏:向治洪

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适用场景:

1、已经存在的类的接口不符合我们的需求;

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

3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。

UML图:

适配器的意义在于,就是为了将已存在的东西(接口)转换成适合我们的需要、能被我们所利用。非常形象的比喻:就像生活中的手机充电器,电脑的电源适配器一样。适配器就行Client和Target的中间件。

代码实现:

普通接口

代码语言:javascript
复制
<span style="font-size:12px;">public class ConcreteTarget implements Target{

	@Override
	public void request() {
		System.out.println("普通类 ...");
	}	
}
//目标接口
	interface Target {
		public void request();
	}</span><span style="font-size: 14px;">
</span>

特殊接口:

代码语言:javascript
复制
<span style="font-size:12px;">public class Adapter {
	public void specificAdapter() {
		System.out.println("适配器模式特殊接口...");
	}
}</span>

所以我们要实现普通和特殊的功能,

代码语言:javascript
复制
class Adapter extends Adaptee implements Target{
	public void request() {
		super.specificRequest();
	}
}

测试

代码语言:javascript
复制
public class Client {
	public static void main(String[] args) {
		// 使用普通功能类
		Target concreteTarget = new ConcreteTarget();
		concreteTarget.request();
		
		// 使用特殊功能类,即适配类
		Target adapter = new Adapter();
		adapter.request();
	}
}

小结

优势

  1. 使用对象组合的方式,用修改的接口来包装适配者
  2. 被适配者的任何子类也可以搭配适配器使用
  3. 个人觉得使用适配器最大的好处是 不需要修改客户端以及被适配者的代码。

缺点

  1. 需要实现所有的方法去完成适配,如果目标非常大,那么工作量也比较大。

NOTE:之前提到的都是 对象适配器,另外还有一种叫做 类适配器,不过类适配器需要多重继承去实现(Adapter需要继承Target和Adaptee),而不是组合的方式去实现。

适配器 装饰者 外观模式的不同:

适配器是:将一个接口转成另一个接口 装饰者是:不改变接口,但加入新的责任 外观模式是:让接口更简单

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优势
  • 缺点
  • 适配器 装饰者 外观模式的不同:
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档