带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)

  • 适配器模式
    • [适配器模式(Adapter Pattern)概述](#适配器模式(Adapter Pattern)概述)
    • [talk is cheap, show you my code](#talk is cheap, show you my code)
    • 总结

适配器模式

适配器模式(Adapter Pattern)是面向对象软件设计中的一种结构型设计模式。它允许不兼容的接口协同工作,通过创建一个适配器类来转换某个类的接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

ok,概念还是太抽象了。来个例子就生动一点。

我们举个手机充电的例子,我们充电头适配的是国内的电网。可是我们国家的电网工作电压与频率不一定与国外的一样,如果我们需要去国外生活或者旅游,怎么办呢? 首先下面我们展示两种充电插头,一种是国标的,另一种是国外的。

我们会怎么办呢? 一般来说,我们会买一个充电转换头

这样的话,我们的充电器就可以在国外正常使用了。其实这样一种实现,就是适配器模式(Adapter Pattern)的体现。

适配器模式(Adapter Pattern)概述

  1. 适配器模式定义与目的
  • 定义:适配器模式是一种结构型设计模式,它使接口不兼容的对象能够协作。适配器充当两个不兼容接口之间的桥梁。
  • 目的:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  1. 适配器模式的实现方式
    在Java中,我们主要通过组合或聚合的方式,在适配器内部包含一个对适配者的引用。

代码案例

java 复制代码
// 对象适配器
class ObjectAdapter implements Target {
    private Adaptee adaptee;

    // 构造函数注入适配者
    public ObjectAdapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void do() {
        adaptee.does();
    }
}

talk is cheap, show you my code

我们通过代码构造充电头那个案例。不过我们是让国外的充电实例(充电头)在中国能使用。

java 复制代码
// 国外充电接口
interface ForeignCharge {
    void charge(double time);
}

// 国内充电接口
interface ChinaCharge {
    void chongDian(double time);
}

// 国外充电接口的实现
class ForeignChargeImpl implements ForeignCharge {
    @Override
    public void charge(double time) {
        System.out.println("charging " + time + " hours");
    }
}

// 适配器类
class ChargeAdapter implements ChinaCharge {
    private final ForeignCharge foreignCharge;

    public ChargeAdapter(ForeignCharge foreignCharge) {
        this.foreignCharge = foreignCharge;
    }

    @Override
    public void chongDian(double time) {
        // 调用国外充电方法
        foreignCharge.charge(time);
    }
}

// 客户端代码
public class Test1 {
    public static void main(String[] args) {
        // 创建国外充电实例
        ForeignCharge foreignCharge = new ForeignChargeImpl();

        // 创建适配器实例
        ChargeAdapter adapter = new ChargeAdapter(foreignCharge);
        
        // 使用适配器调用国外充电实例
        adapter.chongDian(1.00);
    }
}

代码详解

ForeignCharge 接口

  • 作用:定义了一个国外使用的充电接口。
  • 方法:charge(double time) - 表示充电的时间。

ChinaCharge 接口

  • 作用:定义了一个国内使用的充电接口。
  • 方法:chongDian(double time) - 表示充电的时间。

ForeignChargeImpl 类实现ForeignCharge 接口方法

ChargeAdapter 类

  • 作用:适配器类,实现了 ChinaCharge 接口,并持有一个 ForeignCharge 对象。
  • 构造方法:ChargeAdapter(ForeignCharge foreignCharge):接受一个 ForeignCharge 对象并存储在 foreignCharge 成员变量中。
  • 方法:chongDian(double time):调用 foreignCharge 的 charge 方法来完成充电操作。

客户端类步骤详解

  1. 创建一个 ForeignChargeImpl 实例,表示国外的充电设备。
  2. 创建一个 ChargeAdapter 实例,并将 ForeignChargeImpl 实例传递给适配器。
  3. 通过适配器调用 chongDian 方法,实际执行的是 ForeignChargeImpl 的 charge 方法。

总结

  1. 适配器模式的过程中一般涉及三个角色:
    1. Target 目标
    2. Adaptee 被适配者
    3. Adapter 适配者
  2. 适配器模式的优点:
  • 提高代码复用性
  • 增加灵活性,因为我们可以灵活选择要适配的对象
  • 降低耦合, 适配者变化的时候,我们只需要修改适配器代码,客户端可以正常使用
  1. 适配器模式应用场景:
  • 遗留系统集成:当你有一个新的系统需要与旧系统中的某些类交互时,可以使用适配器模式来解决接口不匹配的问题。
  • 第三方库集成:当你想使用第三方库中的类,但这些类的接口不符合你的需求时,适配器模式可以帮助你进行转换。
  • API 升级:在升级 API 或更换框架时,适配器模式可以帮助平滑过渡,确保现有代码继续正常工作。

适配器模式是一种非常实用的设计模式,特别是在需要整合现有代码或第三方库时。理解如何正确使用适配器模式可以帮助开发者更有效地组织代码并优化程序设计。

相关推荐
C++业余爱好者2 分钟前
JVM优化入门指南:JVM垃圾收集器(GC)介绍
java·开发语言·jvm
Trouvaille ~8 分钟前
【Java篇】基石与蓝图::Object 类与抽象类的双重奏
java·开发语言·javase·抽象类·类与对象·基础入门·object类
小光学长11 分钟前
基于ssm的美妆产品推荐系统rah0h134(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring
Light6020 分钟前
破局“数据孤岛”:构建业务、财务、指标三位一体的智能数据模型
java·大数据·开发语言
中文很快乐21 分钟前
从零到一:用 SpringBoot 打造 RESTful API 实战指南
java·spring boot·后端·restful
泉城老铁22 分钟前
springboot+redis 如何实现订单的过期
java·后端·架构
哈哈哈笑什么26 分钟前
在高并发分布式SpringCloud系统中,什么时候时候并行查询,提高查询接口效率,从10s到100ms
java·分布式·后端
IMPYLH27 分钟前
Lua 的 warn 函数
java·开发语言·笔记·junit·lua
泉城老铁29 分钟前
如何用Spring Boot实现分布式锁?
java·redis·后端
周杰伦_Jay37 分钟前
【Java集合与线程池深度解析】底层原理+实战选型+避坑指南(附代码)
java·开发语言·python