设计模式-适配器模式

背景

不同国家的电源插孔可能不一样,需要一个转换插头进行适配。

基本介绍

将某个类的接口转换成客户端期望的另一个接口,增强代码的复用性。

例如:A类想要使用B类中的某个方法,但不能直接使用,A就可以调用适配器类中的某个方法,这个方法协助调用B类的方法,进行实现。

用户无需知道被适配者(B类)的具体实现,是解耦的。

三个角色

①Source:被适配者,可以是类、接口、对象

②Adapter:适配器

③Target:目标,最终需要输出的东西

被适配者经过适配器转换为目标

类适配器模式

基本介绍

让适配器继承被适配者,在适配器中实现客户端需要调用的接口,从而将适配器作为最终需要转换成的目标,客户端可以通过接口调用目标方法。

举个例子

有一个手机要用充电,需要5v的电压,但现在只有一个220v的插座。那么我们要把220v电压转换成5v的电压

220v是一个类,有一个输出220v电压的方法。

创建一个接口,有一个输出5v电压的方法。

创建一个适配器继承220v类,再改写220v类的输出电压方法以实现输出5v电压的接口方法。

手机类只需要调用输出5v电压的接口,实现充电。

分析:

适配器继承被适配者,耦合度较高,但是适配器可以完全重写被适配器的方法,适配灵活性强。

对象适配器模式

基本介绍

原理与类适配器相似,但是适配器不再继承被适配器,而是根据"合成复用原则"用关联关系代替继承关系。

将被适配器作为一个实例对象存放在适配器中。

适配器仍然实现客户端需要调用的接口,但利用被适配器对象实现接口方法。

举个例子

在类适配器模式的例子中,适配器不再继承220v电压类,而是在适配器中声明一个220v电压类。

用这个类实现输出5v电压的接口方法。

在使用适配器时,需要新建一个220v电压类传递给适配器。

接口适配器模式

基本原理

原理与上述两个模式相似,但是在接口与适配器之间添加一个缓冲层。

即创建一个抽象适配器类,给接口的所有方法提供默认实现(空方法)。

具体适配器继承抽象适配器,可以有选择地覆盖接口中的方法。

适用于不希望实现接口中的所有方法的情况,可以降低耦合度。

相关推荐
ttod_qzstudio5 小时前
【软考设计模式】原型模式:“克隆“对象与深拷贝、浅拷贝精讲
设计模式·原型模式
geovindu5 小时前
java: Builder Pattern
java·开发语言·后端·设计模式·建造者模式·生成器模式
越甲八千5 小时前
代理模式和适配器模式区别
代理模式·适配器模式
researcher-Jiang16 小时前
Design Patterns——Template Method入门到情景实战
python·设计模式·模板方法模式
饼干哥哥1 天前
用Claude Code跑通跨境电商的5大场景,顶10个人的团队
人工智能·设计模式·正则表达式
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写一个饮品制作模板(附代码)
java·设计模式·行为型模式·模版方法模式·钩子方法·代码复用·编程实战
ttod_qzstudio1 天前
【软考设计模式】单例模式:唯一实例的管控与线程安全精讲
单例模式·设计模式
折哥的程序人生 · 物流技术专研1 天前
第4篇:模板方法 vs 策略模式,面试怎么选?
java·设计模式·策略模式·行为型模式·模版方法模式·扩充系列·继承v组合
小园子的小菜1 天前
Java设计模式精讲:创建型+结构型模式(含生产级案例+相似模式对比)
学习·设计模式