【23种设计模式专题】 五 适配器模式
2020-05-31 18:33
309 查看
程序猿学社的GitHub,欢迎Star
github技术专题
本文已记录到github
文章目录
前言
到目前为止,创建型模式,我们已经知道是怎么一回事咯,从今天开始结构型模式的适配器模式相关学习。
结构型模式作用?
- 实现松耦合,从而可以扩大整体类结构,用来解决更大的问题
什么是适配器模式?
- 将一个类的接口转换成客户希望的另外一个接口。解决兼容性的问题,让原本因为不兼容不能一起工作的两个类可以一起工作。
工作原理
待适配的类:适配的类或者接口,定义待适配的接口
适配器:调用是适配的类,转为客户期望的类,解决兼容问题
目标:客户希望的接口或者类
场景案例
- CAN转USB接口
- 三口插座转为二口-转换插头
- usb网线转换器(主要是针对超薄本),无网线插头,可通过转换器实现
- 例如我们找工作,其实也是一个适配的过程,对照工作要求进行适配。
隔壁老王: “社长,你这说的都是啥,说的我一脸懵逼的,能否详细说说”
社长: “老王,刚刚我们已经知道适配器的概念和场景,你听着有点懵逼正常,那是因为刚刚都是停留在理论阶段,没有跟生活更好的结合起来,为了方便理解,我画了一个图”
实战
类适配器
网线
package com.cxyxs.designmode.adapter; /** * Description:网线 * Author: 程序猿学社 * Date: 2020/5/16 23:50 * Modified By: */ public class Reticle { public void Internet(){ System.out.println("插上网线,开始网上冲浪。。。"); } }
USB适配接口
package com.cxyxs.designmode.adapter; /** * Description:USB适配接口 * Author: 程序猿学社 * Date: 2020/5/17 0:22 * Modified By: */ public interface Usb { public void conversion(); }
- 处理上网的请求
适配器
package com.cxyxs.designmode.adapter; /** * Description:适配器 * Author: 程序猿学社 * Date: 2020/5/16 23:55 * Modified By: */ public class UsbAdapter extends Reticle implements Usb{ @Override public void conversion() { super.Internet(); } }
- 等价于USB转接器
电脑
package com.cxyxs.designmode.adapter; /** * Description:超薄电脑 * Author: 程序猿学社 * Date: 2020/5/16 23:52 * Modified By: */ public class UltraThinPc { /** * 网上冲浪 * @param usb */ public void surfing(Usb usb){ usb.conversion(); }; }
隔壁老王: “买了一台电脑,只有USB接口,我们需要上网咋办?”
社长: “我们需要买一个USB网线转换器,就可以实现上网功能,所以这里需要聚合一个USB的接口,这样就可以实现上网功能”
测试类
package com.cxyxs.designmode.adapter; /** * Description: * Author: 程序猿学社 * Date: 2020/5/17 0:02 * Modified By: */ public class Client { public static void main(String[] args) { UsbAdapter usb = new UsbAdapter(); UltraThinPc ultraThinPc = new UltraThinPc(); ultraThinPc.surfing(usb); } }
社长: “说了这么多,我们来总结一下类适配器”
类适配器缺点:
- 类适配器(UsbAdapter)使用了单继承(Reticle网线),会有局限性。
隔壁老王: “既然,类适配器存在单继承的问题,有没有版本去改进”
社长: “有办法的,我们可以采用对象适配器的方式”
对象适配器
对象适配器
package com.cxyxs.designmode.adapter.newclass; import com.cxyxs.designmode.adapter.Reticle; import com.cxyxs.designmode.adapter.Usb; /** * Description:适配器 * Author: 程序猿学社 * Date: 2020/5/16 23:55 * Modified By: */ public class UsbNewAdapter implements Usb{ private Reticle reticle; public UsbNewAdapter(Reticle reticle) { this.reticle = reticle; } @Override public void conversion() { reticle.Internet(); } }
- 把继承换成聚合,解决了单继承的问题
客户端
package com.cxyxs.designmode.adapter.newclass; import com.cxyxs.designmode.adapter.Reticle; import com.cxyxs.designmode.adapter.UltraThinPc; import com.cxyxs.designmode.adapter.UsbAdapter; /** * Description: * Author: 程序猿学社 * Date: 2020/5/17 0:02 * Modified By: */ public class NewClient { public static void main(String[] args) { //网线 Reticle reticle = new Reticle(); UsbNewAdapter usb = new UsbNewAdapter(reticle); UltraThinPc ultraThinPc = new UltraThinPc(); ultraThinPc.surfing(usb); } }
作者:程序猿学社
原创公众号:『程序猿学社』,专注于java技术栈,分享java各个技术系列专题,以及各个技术点的面试题。
原创不易,转载请注明来源(注明:来源于公众号:程序猿学社, 作者:程序猿学社)。
相关文章推荐
- 使用Object-C实现23种设计模式之适配器模式
- 23种设计模式(5)-适配器模式
- java23种设计模式--适配器模式(Adapter)
- 23种设计模式(5)-适配器模式
- 23种设计模式3--结构型模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)
- 23种设计模式之适配器模式
- GoF23种设计模式之结构型模式之适配器模式
- 【Unity与23种设计模式】适配器模式(Adapter)
- Java开发中的23种设计模式之六:适配器模式(Adapter)
- Java的23种设计模式----适配器模式
- 23种设计模式--适配器模式
- 重学java23种设计模式(6)适配器模式
- GoF23种设计模式之结构型模式之适配器模式
- c++ 23种设计模式之适配器模式
- 23种设计模式(6)-适配器模式
- 23种设计模式(5)-适配器模式
- 23种设计模式(17):适配器模式
- java_23种设计模式之适配器模式
- 23种设计模式C++实例之适配器模式
- java23种设计模式之适配器模式(Adapter)