当前位置: 首页 > news >正文

13.结构型 - 适配器模式 (Adapter Pattern)

适配器模式 (Adapter Pattern)

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁
意图: 将一个类的接口转换成客户希望的另外一个接口; 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;
主要解决: 主要解决在软件系统中, 常常要将一些"现存的对象"放到新的环境中, 而新环境要求的接口是现对象不能满足的;

代码实例

例: 一个生活中的例子, 家里有一台空调, 现有一个三口的插座, 空调使用三口插座, 完美匹配;
倘若再买一台TV电视, 使用二口插座, 如何解决这个问题?

UML类图

Pasted image 20231128214112

1.三线 设备及实现

//三口插头
public interface TriplePin {//参数分别为火线live, 零线null, 地线earthpublic void electrify(int l, int n, int e);
}// 空调
public class AirConditioning implements TriplePin {@Overridepublic void electrify(int l, int n, int e) {System.out.println("火线接通: " + l);System.out.println("零线接通: " + n);System.out.println("地线接通: " + e); }
}

2.二线 设备及实现

//二口插头
public interface DualPin {public void electrify(int l, int n);//这里没有地线
}
// 电视
public class TV implements DualPin {@Overridepublic void electrify(int l, int n) {System.out.println("火线接通: " + l);System.out.println("零线接通: " + n);}
}

3.使用者

// 我是一个固执的电源, 只给三线设备的供电
public class Power {@Overridepublic void ConnectElectricity(TriplePin pin) {int l = 1, n = 0, e = -1;pin.electrify( l,  n,  e);}
}

4.适配实现

有两种实现方式

  1. 类适配器: 继承实现
  2. 对象适配器: 组合实现

推荐使用组合的方式优于继承方式

4.1.对象适配器(组合实现)

public class TriplePinAdapter implements TriplePin {private DualPin dualPinDevice; //创建适配器的时候, 需要把双插设备接入进来public TriplePinAdapter(DualPin dualPinDevice) {this.dualPinDevice = dualPinDevice;}//适配器实现 目标接口(三线)@Overridepublic void electrify(int l, int n, int e) {//实际上调用了被适配设备的双插通电, 地线e被丢弃了; dualPinDevice.electrify(l, n);}}

4.2.对象适配器(继承的方式)

//继承二线设备, 实现三线设备接口
public class TriplePinAdapter extends TV implements TriplePin{@Overridepublic void electrify(int l, int n, int e) {super.electrify(l, n);}}

5.测试

 public static void main(String[] args) {Power power = new Power();//固执的电源power.ConnectElectricity(new AirConditioning() );//给空调使用, 完美匹配;// 新买一台电视, 它是二线设备, 也想用, 怎么办?DualPin tv = new TV();// 通过适配器, 组合二口设备TriplePin triplePin = new TriplePinAdapter(tv)// 不完美使用power.ConnectElectricity(triplePin );}

适配器模式 (Adapter Pattern) 总结

关键角色

  1. 目标角色(被适配)
  2. 适配角色(通过组合改变目标, 被不兼容的使用者使用)
  3. 使用者(固定, 或者旧系统代码)

适配器模式的优缺点

适配器模式的优点

  1. 将目标类和适配者类解耦, 通过引入一个适配器类来重用现有的适配者类, 无序修改原有结构
  2. 增加了类的透明性和复用性, 将具体业务实现过程封装在适配者类中, 对于客户端类而言是透明的, 而且提高了适配者的复用性, 同一个适配者类可以在多个不同的系统中复用.
  3. 灵活性和扩展性都非常好, 通过使用配置文件可以很方便的更换适配器, 也可以在不修改原有代码的基础上增加新的适配器类, 符合开闭原则.

适配器模式的缺点

  • 类适配器的缺点
    1. 对于Java等不支持多重继承的语言, 一次最多只能适配一个适配者类, 不能同时适配多个适配者
    2. 适配者类不能为被 final 修饰
  • 对象适配器的缺点
    1. 与类适配器模式相比较, 在该模式下要在适配器中置换适配者类的某些方法比较麻烦.

适配器模式适用的场景

  • 统一多个类的接口设计时

    某个功能的实现依赖多个外部系统(或者说类)。通过适配器模式, 将它们的接口适配为统一的接口定义

  • 需要依赖外部系统时

    当我们把项目中依赖的一个外部系统替换为另一个外部系统的时候, 利用适配器模式, 可以减少对代码的改动

  • 原有接口无法修改时或者原有接口功能太老旧但又需要兼容;

    JDK1.0 Enumeration 到 Iterator 的替换, 适用适配器模式保留 Enumeration 类, 并将其实现替换为直接调用 Itertor.

  • 适配不同数据格式时;

    Slf4j 日志框架, 定义打印日志的统一接口, 提供针对不同日志框架的适配器

代理、桥接、装饰器、适配器 4 种设计模式的区别

代理、桥接、装饰器、适配器,这 4 种模式是比较常用的结构型设计模式。它们的代码结构非常相似. 但其各自的用意却不同

  1. 适配器模式的主要目的是:将一个类的接口转换为客户希望的另一个接口.适配器模式让那些不兼容的类可以一起工作
  2. 和 代理模式 的区别:适配器模式主要改变所考虑对象的接口, 而代理模式 主要目的是控制访问,不改变所代理类的接口
  3. 和 装饰器模式 的区别:装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。
  4. 和 桥接模式 的区别:桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。
http://www.zskr.cn/news/78002.html

相关文章:

  • Tauri 窗口拖拽功能偶尔失效问题修复总结
  • PyTorch推理扩展实战:用Ray Data轻松实现多机多卡并行
  • 2025婴儿车性价比排行榜首选:UPPAbaby MINU V3如何以轻便全能理念重新定义价值标准(附权威认证)
  • Java数组
  • 洛谷 P8189
  • 12月8日
  • 你在用什么免费ip库?
  • 香橙派上进行 Livox Mid-360 激光雷达开发(二)移植FAST_LIO
  • 10406_基于Springboot的社交平台系统
  • 2025 年 12 月杭州公寓出租权威推荐榜:精选浙江优质房源,温馨宜居与便捷交通的完美之选
  • 2025云南短视频制作服务商/公司TOP5推荐!昆明等地短视频制作企业榜单发布,赋能企业品牌传播新生态
  • 极速AI助手 - 多AI服务桌面助手, 支持MCP工具调用, 内置免费AI功能
  • Python函数基础实战教程:从定义调用到参数传值全解析
  • 获取数组长度即最大下标
  • 白带异常用药推荐:科学应对妇科炎症的健康指南
  • 第49天
  • 洛谷 P3959
  • 东城区离婚律师事务所推荐:专注婚姻家事的法律服务机构
  • 水下的成长——Goodbye 2025
  • 口碑好的治疗白带异常的品牌推荐 女性健康守护指南
  • Codeforces Round 1069 (Div. 2) A-E2
  • 北京胜率高的婚姻律师事务所有哪些
  • 模切机品牌推荐:国内优质选择及核心优势解析
  • 出门改变
  • 朝阳区婚姻律师事务所推荐:聚焦家事法律服务机构综合盘点
  • 工业洗地机品牌推荐:口碑之选与实用选购参考
  • 数据会说谎?三大推断方法帮你“审问”数据真相
  • 实用指南:本地开发可信 HTTPS 证书生成神器:mkcert
  • 京城爱加陪诊官方服务电话信息声明公示
  • 2025年微信公众号排版工具权威评测:哪款编辑器更适合你?