带着国标充电器出国怎么办? 适配器模式(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 或更换框架时,适配器模式可以帮助平滑过渡,确保现有代码继续正常工作。

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

相关推荐
kangkang-几秒前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
界面开发小八哥2 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz2 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉2 小时前
Maven 依赖调解的两大原则
java·maven
netyeaxi3 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~3 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码3 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码3 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健3 小时前
武汉拿下 23k offer 经历
java·面试·ai编程
FreeBuf_3 小时前
Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
java·tomcat·apache