设计模式六(适配器模式)

简介: 这个不同于以往的所讲的设计模式,这是一个结构型的设计模式,应用也比较多,jdk底层有诸多的适配器设计模式

以往讲了四期的创建型的设计模式,其实是五期,因为我把工厂模式和抽象工厂模式放在一篇文章中讲述了!今天我来写一篇全新的结构型的设计模式-----适配器模式

适配器模式如果细分的话可以分为三种,类适配器模式、对象适配器模式、接口适配器模式。适配器模式从字面上理解就有讲两个物体配对起来的意思,事实上它的意思其实就相当于充电器的充电头或者转接头的作用。将两个不兼容的但需要相互作用的物体一起工作但又不出现排斥现象,在这中间就需要适配器出来调节了!


大家都知道华为手机的充电接口大部分是type-c接口,苹果7以上基本用的都是Lightning充电接口!下面我就用这个不同接口之间转换的案例,来凸显出适配器的作用!

类适配器模式

image.png

先创建一个华为手机对象,并定义一个充电方法

image.png

再定义一个Lightning类型的充电接口类,定义一个它的自己的对应的方法返回一个lightning充电接口!

image.png


定义一个手机接口,创建一个接口转换方法,供具体子类来实现

image.png

先定义一个type-c接口适配器继承Lightning类型接口的类并实现手机接口转换的接口,重写转换接口的方法,进行判断如果为type-c接口就直接返回,不是就转变为type-c接口返回。


image.png

客户端只需简单的创建一个华为手机对象并调用充电方法传入所需的充电接口适配器就可以实现接口转换,从而给手机充上电了

image.png

运行后,结果也是如我们所愿。



接口适配器

image.png

先定义一个接口,内部写三个抽象方法

image.png

定义三个抽象类的适配器将接口所有方法默认实现

image.png

客户端如果需要接口中的某个方法只需通过创建适配器这个对象有选择性的覆盖重写所需的方法就可以了,不用去实现这个接口中所有的方法。


对象适配器模式

image.png

同样先定义一个华为手机对象,内容创建一个充电的方法

image.png

和上面的类适配器中的Lightning充电接口类大相径庭,这里相当于复制了一份

image.png

此接口同样是一个定义充电接口转换的抽象方法

image.png

从这个适配器开始不再像上面说的类适配器模式去继承了Lightning充电接口类了,而是换成了采用聚合的方式将Lightning对象放入适配器中去了,这也正好符合里氏替换原则,少继承多聚合或组合。适配器类重写转换接口方法,拿到充电接口类型判断是否为type-c类型,是就直接返回,不是就转换成type-c接口类型返回。

image.png

客户端通过创建一个华为手机对象调用其的充电方法,传入适配器对象和原接口对象,经过适配器的作用,就可以将Lightning类型的充电接口转换为type-c类型的充电接口


image.png

一执行果然适配器的作用就展现出来了,成功转成了type-c充电接口


总结:适配器最大的用处就是将不兼容的两个类可以互相作用和联系起来!



相关文章
|
2月前
|
设计模式 Java API
重构旧代码的秘诀:用设计模式 - 适配器模式(Adapter)给Java项目带来新生
【4月更文挑战第7天】适配器模式是解决接口不兼容问题的结构型设计模式,通过引入适配器类实现目标接口并持有不兼容类引用,实现旧代码与新接口的协作。适用于处理兼容性问题、整合遗留代码和集成第三方库。应用时,识别不兼容接口,创建适配器类转换方法调用,然后替换原有引用。注意保持适配器简单、使用组合和考虑扩展性。过度使用可能导致系统复杂和维护成本增加,应谨慎使用。
|
2月前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
56 4
|
2月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
【设计模式】JAVA Design Patterns——Adapter(适配器模式)
|
19天前
|
设计模式
适配器模式-大话设计模式
适配器模式-大话设计模式
16 2
|
1月前
|
设计模式 Java C#
【设计模式】第六篇:来康康适配器模式
类适配器模式 主要使用继承实现,耦合度高,且在单继承的语言中使用会受限,还需要防止继承带来的一些问题
21 5
|
13天前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 适配器模式
js设计模式【详解】—— 适配器模式
9 0
|
18天前
|
设计模式 Java Android开发
Java设计模式:适配器模式的三种形式(五)
Java设计模式:适配器模式的三种形式(五)
|
19天前
|
设计模式 Java
Java设计模式之适配器模式详解
Java设计模式之适配器模式详解
|
25天前
|
设计模式 程序员
结构型设计模式之适配器模式
结构型设计模式之适配器模式
|
1月前
|
设计模式 算法 关系型数据库
设计模式第七讲-外观模式、适配器模式、模板方法模式详解
系统要求所有的数据库帮助类必须实现ISqlHelp接口,面向该接口编程,如SQLServerHelp类。 此时第三方提供了一个新的MySql的帮助类(假设是dll,不能修改),它的编程规范和ISqlHelp不兼容,这个时候就需要引入适配器类,使二者能相互兼容。
150 0