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

设计模式中的“万能转换器”——适配器模式

设计模式中的“万能转换器”——适配器模式

  • 一、核心逻辑
  • 二、类适配器 vs 对象适配器
    • 类适配器(继承实现)
    • 对象适配器(组合实现)
  • 三、应用场景
  • 四、优缺点
  • 五、适配器模式的本质

在这里插入图片描述

你用过Type-C转HDMI的转换器吗?它的作用很简单:让Type-C接口的电脑能连接HDMI接口的显示器。适配器模式就是软件世界的“转换器”,它能将两个不兼容的接口(比如数据格式、协议、硬件规格)连接起来,让它们无缝协作。

一、核心逻辑

适配器模式的核心是中间商思维:不改变原有代码,而是增加一个中间层(适配器)来协调矛盾。它的三个关键角色:

  1. 目标接口(Target):用户需要的接口(如显示器的HDMI接口)。
  2. 适配者类(Adaptee):已存在的、功能完善但接口不兼容的类(如电脑的Type-C接口)。
  3. 适配器类(Adapter):将适配者的功能“翻译”为目标接口(如Type-C转HDMI转换器)。

举个栗子:

  • 显示器(目标接口):需要HDMI信号输入。
  • 笔记本电脑(适配者):只能输出Type-C信号。
  • 转换器(适配器):将Type-C信号转换为HDMI格式。

二、类适配器 vs 对象适配器

类适配器对象适配器
实现方式继承被适配类(如extends TypeCDevice组合被适配对象(如private TypeCDevice
灵活性仅支持单一被适配类支持多种设备(如Type-C/USB-A/DP接口)
代码耦合度高(需继承具体类)低(仅依赖接口)
适用场景专用转换器(如固定品牌设备)多功能转换坞(需兼容多种协议)

类适配器(继承实现)

场景:专用Type-C转HDMI线(适配关系固定)

// 目标接口:HDMI输出协议  
interface HDMI {  
    void sendHDMISignal();  
}  

// 被适配者:Type-C接口的笔记本  
class TypeCDevice {  
    void sendTypeCSignal() {  
        System.out.println("发送Type-C数字信号");  
    }  
}  

// 类适配器(继承TypeCDevice,实现HDMI接口)  
class TypeCToHDMIAdapter extends TypeCDevice implements HDMI {  
    @Override  
    public void sendHDMISignal() {  
        super.sendTypeCSignal();  // 调用父类方法  
        System.out.println("类适配器:Type-C信号 → HDMI信号转换");  
    }  
}  

// 客户端调用  
public class Client {  
    public static void main(String[] args) {  
        HDMI adapter = new TypeCToHDMIAdapter();  
        adapter.sendHDMISignal();  
    }  
}  

输出结果

发送Type-C数字信号  
类适配器:Type-C信号 → HDMI信号转换  

特点

  • 适配器直接继承被适配者(TypeCDevice)
  • 代码耦合度高,无法动态更换适配对象

对象适配器(组合实现)

场景:多功能转换坞(支持Type-C/USB-A转HDMI)

// 目标接口:同上HDMI接口  

// 对象适配器(实现HDMI接口,持有TypeCDevice实例)  
class UniversalHDMIAdapter implements HDMI {  
    private TypeCDevice typeCDevice;  

    UniversalHDMIAdapter(TypeCDevice device) {  
        this.typeCDevice = device;  
    }  

    @Override  
    public void sendHDMISignal() {  
        typeCDevice.sendTypeCSignal();  
        System.out.println("对象适配器:动态转换信号 → HDMI");  
    }  
}  

// 客户端调用  
public class Client {  
    public static void main(String[] args) {  
        TypeCDevice macbook = new TypeCDevice();  
        HDMI adapter = new UniversalHDMIAdapter(macbook);  
        adapter.sendHDMISignal();  
    }  
}  

输出结果

发送Type-C数字信号  
对象适配器:动态转换信号 → HDMI  

特点

  • 适配器通过组合持有被适配者对象
  • 可动态适配不同设备(如同时支持Type-C和USB-A输入)

三、应用场景

  • 硬件接口转换:Type-C转网口、USB转串口。
  • 数据格式兼容:JSON转XML、旧版API对接新版系统。
  • 协议适配:蓝牙设备连接不同操作系统的手机。

四、优缺点

  • 优点:
    • 复用性:老旧设备无需改造即可接入新系统。
    • 灵活性:一个适配器可支持多场景(如三合一充电线)。
  • 缺点:
    • 过度使用会臃肿:就像包里的各种转换器,太多反而难以管理。

五、适配器模式的本质

  • 核心价值:通过中间层转换接口冲突,符合开放-封闭原则(不修改原有代码)
  • 硬件映射
    • 类适配器 → 焊接式固定转换线(如苹果官方Type-C转HDMI线)
    • 对象适配器 → 第三方多功能扩展坞(支持热插拔)
  • 开发启示:优先使用对象适配器,避免Java单继承的限制

通过HDMI场景的深入解析可见,适配器模式是接口冲突的终极解决方案。无论是代码中的协议转换,还是你桌上那根“救命”的Type-C转HDMI线,都在默默践行这一设计哲学。

相关文章:

  • 【AI News | 20250331】每日AI进展
  • 鸿蒙编译构建-多目标产物
  • Scala循环守卫
  • vi编辑器常见命令
  • stm32第十一天外部中断按键控制灯
  • 自定义类型:结构体
  • 【Java】——数组深度解析(从内存原理到高效应用实践)
  • CentOS 7上手动强制升级docker-compose(不使用yum)
  • 苍穹外卖项目结构
  • Loadrunner报错Virtual User Generator 初始化用户生成器失败 初始化失败
  • AI产品的架构(分四层)
  • ArkUI —— 组件导航
  • zk基础—1.一致性原理和算法二
  • Android:Dialog的使用详解
  • K8S 存储:emptyDir、hostPath、local详解
  • 观察者模式在Java单体服务中的运用
  • 质检LIMS实验室系统在塑料制品的应用 LIMS系统重塑塑料制品质检
  • leetcode hot100 多维动态规划
  • hadoop集群的常用命令
  • 《Spring Boot全栈开发指南:从入门到生产实践》
  • 忻州网站建设网站推广/杭州seo排名收费
  • 长沙专业的网站建设企业/百度推广电话客服
  • 建设银行忘记密码网站首页/seo顾问服务
  • 注册外贸网站有哪些问题/百度搜索热词排行榜
  • 文件大小 wordpress/seo排名查询工具
  • 学完js了可以做哪些网站/国外免费域名申请