设计模式-适配器模式

核心思想

  • 见名知意,是作为两个不兼容的接口的桥梁,属于结构型模式
  • 使得原来由于接口不兼容而不能一起工作的那些类可以一起工作

常见的几类适配器

  • 类的适配器模式
    • 想将一个类转换成满足另外一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可
  • 对象的适配器模式
    • 想将一个对象转换成满足另外一个接口的对象时,可以创建一个适配器类,持有原类的一个实例,在适配类的方法中,调用实例的方法就行
  • 接口的适配器模式
    • 不想实现一个接口中得所有方法时,可以创建一个适配器,实现所有方法,在写别的类的时候,继承适配器类即可

场景使用

  • 在使用一些旧系统或者是类库时,经常会出现接口不兼容的问题,适配器模式在解决这类问题具有优势
  • 学习设计模式一定不要局限代码层面,要从软件系统整体去考虑,而不是为了使用设计模式,而去使用设计模式

优缺点

优点

  • 可以让任何两个没有关联的类一起运行,使得原本由于接口不兼容而不能一起工作的那些类一起工作
  • 增强灵活度,提高复用性,适配器可以在多个系统使用,符合开闭原则

缺点

  • 整体类的调用链路增加
    • 比如 本来A可以直接调用C,使用适配器后是A调用BB再调用C

代码示例(类的适配器模式)

类图

旧的原始类

java 复制代码
public class OldModule {

    public void methodA(){
        System.out.println("OldModule methodA");
    }

}

新的目标接口

java 复制代码
public interface TargetModule {

    /**
     * 和需要适配的类方法名一样
     */
    void methodA();

    /**
     * 新的方法,如果有多个新的方法直接编写就行
     */
    void methodB();

    void methodC();

}

适配器

java 复制代码
public class Adapter extends OldModule implements TargetModule {

    /**
     * 新的方法,和老的类方法不一样
     */
    @Override
    public void methodB() {
        System.out.println("Adapter methodB");
    }

    /**
     * 新的方法,和老的类方法不一样
     */
    @Override
    public void methodC() {
        System.out.println("Adapter methodC");
    }

}

测试

java 复制代码
public class AppRun {
    public static void main(String[] args) {

        TargetModule targetModule = new Adapter();
        targetModule.methodA();
        targetModule.methodB();
        targetModule.methodC();

    }
}
相关推荐
Zane199415 小时前
一个 new 就能创建对象,为什么还要拆出单例、工厂、建造者、原型四种模式?
设计模式
怕浪猫2 天前
一行命令复刻爆款视频,我把 Hypit 从安装跑到了出片
人工智能·设计模式·程序员
Zane19942 天前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19943 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式
她说..3 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
xiaofeiyang1503 天前
第六章 · 桥接 — 三支毛笔,画出九种颜色
设计模式
Shadow(⊙o⊙)4 天前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki4 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅665 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa5 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio