专栏首页AnRFDev适配器模式 Adapter Pattern - Java实现

适配器模式 Adapter Pattern - Java实现

定义

将一个类的接口变换成客户端锁期待的另一种接口,从而使原本因接口不匹配而无法工作在一起的两个类能够在一起工作。 也叫作变压器模式,亦称包装模式,但包装模式不止一个。 简单而言,适配器模式就是把一个接口或类转换成其他的接口或类。

应用

优点:

  • 可以让没有任何关系的类在一起运行
  • 增加了类的透明性
  • 提高了类的复用度
  • 灵活度好

注意事项:在详细阶段不要考虑适配器模式,它主要是用来解决正在服役的项目问题

代码示例

向已运行的系统添加新增的用户类型

文件目录如下

adapter/
├── sadapter  // 新增的适配器代码
│   ├── SecondUserAdapter.java
│   ├── SecondUserAddress.java
│   └── SecondUser.java
├── stable    // 已经在运行的代码,不可变
│   ├── FirstUser.java
│   └── IFirstUser.java
├── TestAdapter.java // 测试代码
└── updated   // 第三方提供的接口,不可变
    ├── ISecondUserAddress.java
    └── ISecondUser.java

首先看已经在运行的部分 (stable)

public interface IFirstUser {
    void printInfo();
}
public class FirstUser implements IFirstUser {

    private String username;

    public FirstUser(String username) {
        this.username = username;
    }

    @Override
    public void printInfo() {
        System.out.println(this.username);
    }
}

再看按需求添加的部分 (updated)

public interface ISecondUser {
    void printUsername();
}
public interface ISecondUserAddress {
    void printAddress();
}

为此新建的适配器 (sadapter)

分别新建2个类来实现接口

public class SecondUser implements ISecondUser {

    private String username;

    public SecondUser(String name) {
        this.username = name;
    }

    @Override
    public void printUsername() {
        System.out.print(username + " ");
    }
}

public class SecondUserAddress implements ISecondUserAddress {

    private String addr;

    public SecondUserAddress(String address) {
        this.addr = address;
    }

    @Override
    public void printAddress() {
        System.out.print(this.addr);
    }
}

适配器持有这两个接口的引用,并实现原有的接口

public class SecondUserAdapter implements IFirstUser {

    private ISecondUser iSecondUser;
    private ISecondUserAddress iSecondUserAddress;

    public SecondUserAdapter(ISecondUser iSecondUser, ISecondUserAddress iSecondUserAddress) {
        this.iSecondUser = iSecondUser;
        this.iSecondUserAddress = iSecondUserAddress;
    }

    @Override
    public void printInfo() {
        iSecondUser.printUsername();
        iSecondUserAddress.printAddress();
    }
}

适配器构建完毕,测试代码

IFirstUser user1 = new FirstUser("User1");
user1.printInfo();
SecondUserAdapter userAdapter = 
    new SecondUserAdapter(new SecondUser("SUser2"),new SecondUserAddress("5 street"));
userAdapter.printInfo();

output

User1
SUser2 5 street

最吸引人的地方就是适配器实现了原有的接口。需求变化时,可尽量少的改动已有代码。

参考:《设计模式之禅》 秦小波

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP 适配器模式(Adapter Design Pattern)

    通过适配器模式能够使用新的代码和功能性来帮助更新原有的系统,简单的说需要转化一个对象的接口用于另一个对象中时,在不改变原对象的基础上可以采用适配器模式

    Marco爱吃红烧肉
  • 设计模式- 适配器模式 (Adapter Pattern)

    适配器从结构上可以分为类适配器和对象适配器。其中类适配器使用继承关系来对类进行适配,而对象适配器是使用对象引用的方法来进行适配的。

    易兒善
  • Java常用设计模式--适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    gang_luo
  • 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) ? 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用...

    solenovex
  • Java适配器模式(adapter)

      将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

    用户4919348
  • 设计模式之适配器模式(Adapter Pattern)适配器模式的定义

    适配器模式(Adapter Pattern)在生活中的应用随处可见。最常见的,我们使用的转接头就是利用了适配器模式的思想,我们可能用type-c接口的手机,但现...

    desperate633
  • 设计模式 (10)——适配器模式(Adapter Pattern,结构型)

    使用设计模式可以提高代码的可复用性、可扩充性和可维护性。适配器模式(Adapter Pattern)属结构性模式,将一个类的接口转换成客户期望的另一个接口。适配...

    Dabelv
  • 适配器模式(Adapter)

    Java高级架构
  • 适配器模式(Adapter)

    适配器模式(Adapter) 适配器模式(Adapter)[Wrapper] 意图:将类的一个接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能一起工...

    Florian
  • 适配器模式(Adapter)

    定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapp...

    happlyfox
  • Java设计模式(六)Adapter适配器模式

    一、场景描述 “仪器数据采集器”包含采集数据以及发送数据给服务器两行为,则可定义“仪器数据采集器”接口,定义两方法“采集数据capture”和“发送数据send...

    用户1637609
  • 适配器模式(Adapter Pattern)- 最易懂的设计模式解析

    把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。

    Carson.Ho
  • 适配器模式(Adapter Class/Object)

    qubianzhong
  • 【设计模式】—— 适配器模式Adapter

      模式意图   如果已经有了一种类,而需要调用的接口却并不能通过这个类实现。因此,把这个现有的类,经过适配,转换成支持接口的类。   换句话说,就是把一种现有...

    用户1154259
  • 『设计模式』适配器模式(Adapter)

    适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。

    风骨散人Chiam
  • 浅谈JAVA设计模式之——适配器模式(Adapter)

    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    冰河
  • 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern)。适配器模式用处还是比较多...

    lizelu
  • 3.设计模式--适配器模式(adapter模式)

    适配器模式可能是开发人员用的最多的一种设计模式,做后台开发你可能每天都在使用。只是不知道他的名字;现实中的适配器你应该不会陌生,新款的IQOO 8 pro手...

    大猫的Java笔记
  • 常用开源框架中设计模式使用分析- 适配器模式(Adapter Pattern)

    在Spring Aop框架中,MethodInterceptor接口被用来拦截指定的方法,对方法进行增强。

    加多

扫码关注云+社区

领取腾讯云代金券