文章首发:
结构型模式:适配器模式java
七大结构型模式之一:适配器模式。设计模式
姓名 :适配器模式微信
英文名 :Adapter Pattern架构
价值观 :老媒人,牵线搭桥机器学习
我的介绍 :
Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
将一个类的接口变换成客户端所期待的另外一种接口,从而使本来因接口不匹配而没法在一块儿工做的两个类可以在一块儿工做。
(来自《设计模式之禅》)ide
你们有买过港式的 Apple 产品么?在深圳的同窗估计买过,毕竟港式的 Apple 产品基本比国内便宜 500 以上。我手机和平板都是在香港买的,买来后这充电器是无法直接充电的,由于港版的电子产品都是英式的插头,而我们国内是中式的,因此用上港版电子产品的同窗免不了要用上这么一个转换器:将英式的插孔转为中式的插孔,方可插入咱家里的插座充电。这个转换器就是今天想讲的适配器。学习
没见过的同窗能够看看图片熟悉一下,下图右边为港版苹果手机充电器,插头比较大,左边为某品牌转换器,插头为中国家用标准形状。
this
下图为使用时的图片
设计
在这描述一下这个场景。用港式插头要在国内充电,由于插头和插座大小对不上,因此须要加一个适配器,这个适配器充当插头和插座,它的插头能够插入国内标准的插座,它的插座能够插入港式标准的插头,这样子就能够用港式充电器在国内为手机充电。code
下面用适配器模式代码实现这个场景。
首先须要找到被适配的对象是什么?在这里咱们的被适配对象是英式充电器。
/** * 英式充电器 */ class BritishCharger { public void chargeByBritishStandard(){ System.out.println("用英式充电器充电"); } }
在这个场景的目的是什么?在中国为港式手机充电,所以目的是让英式充电器可以在中国标准的插座充电。
/** * 使用中式插座充电 */ interface Target { void chargeByChineseStandard(); }
接下来是这个设计模式的主角:适配器。它须要链接中式插座以及英式充电器,在中间作适配功能。
/** * 充电器适配器 */ class ChargerAdapter implements Target { private BritishCharger britishCharger; public ChargerAdapter(BritishCharger britishCharger) { this.britishCharger = britishCharger; } @Override public void chargeByChineseStandard() { System.out.println("使用中英式插头转换器"); britishCharger.chargeByBritishStandard(); } }
上面是适配器模式的一个简单的例子,要学习适配器模式也能够看看 Java 的 IO 实现源码,里面是应用适配器模式的官方很好的代码。
适配器很好的将 2 个没法关联的类结合起来,在中间起桥梁做用。另外新增适配器代码不会影响原来被适配者的正常使用,他们能够一块儿被使用。在工做中和外部系统对接的时候,大可能外部系统的数据格式和本身系统的数据格式并不相同,这时候就能够利用适配器模式来实现。
推荐阅读
公众号后台回复『大礼包』获取 Java、Python、IOS 等教程
加我的微信备注『教程』获取架构师、机器学习等教程