设计模式——适配器模式06

适配器模式 通常在已有程序中使用,至少有两个类的接口不兼容时,让相互不兼容的类能很好地合作。例如之前系统 用的Target 接口调用,现在要新增第三方接口Adaptee。如何进行适配,面向客户端提供 调用Target接口方式达到使用Adaptee目的。简单理解:
客户端(Main函数)要调用Target 使用 Adaptee 功能。
根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种。

类适配器:新建一个适配器叫Adapter, Adapter 继承 Adaptee ,并实现Target接口完成适配
对象适配器:新建一个适配器叫Adapter, Adapter 里面含有 Adaptee 属性(构造器委托),并实现Target接口完成适配
设计模式,一定要敲代码理解

Target (调用目标接口)

/**
适配器—— Target 是调用目标, 是其他对象 的"榜样",
 都要向其看齐
*/
public interface Target {
    void targetUse1();

    void targetUse2();
}

Adaptee (需适配接口)

/**
 * @author ggbond
 * @date 2024年04月04日 10:25
 * 第三方接口,后面需 通过  Adapter 适配,使得Target兼容
 */
public class Adaptee {
    public void method1() {
        System.out.println("Adaptee:方法1");
    }

    public void method2() {
        System.out.println("Adaptee:方法2");
    }
}

继承适配

/**
 * @author ggbond
 * @date 2024年04月04日 10:29
 * 类适配器 ,采用继承方式
 */
public class Adapter01 extends  Adaptee implements Target {
    @Override
    public void targetUse1() {
        System.out.println("适配 Adaptee 的方法1.");
        method1();
    }

    @Override
    public void targetUse2() {
        System.out.println("适配 Adaptee 的方法2.");
        method2();
    }
}

委托适配

    /**
     * @author ggbond
     * @date 2024年04月04日 10:29
     * 对象适配器,采用继承方式
     */
    public class Adapter02 implements Target  {
        private  Adaptee adaptee;

        public Adapter02(Adaptee adaptee) {
            this.adaptee = adaptee;
        }

        @Override
        public void targetUse1() {
            System.out.println("适配 Adaptee 的方法1.");
            adaptee.method1();
        }

        @Override
        public void targetUse2() {
            System.out.println("适配 Adaptee 的方法2.");
            adaptee.method2();
        }
    }

调用测试

/**
 * @author ggbond
 * @date 2024年04月04日 10:43
 * 调用Target接口,使用Adaptee接口
 */
public class Main {
    public static void main(String[] args) {
        Target target01 = new Adapter01();
        target01.targetUse1();
        target01.targetUse2();

        System.out.println("-----------");

        Target target02 = new Adapter02(new Adaptee());
        target02.targetUse1();
        target02.targetUse2();
    }
}

结果

适配 Adaptee 的方法1.
Adaptee:方法1
适配 Adaptee 的方法2.
Adaptee:方法2
-----------
适配 Adaptee 的方法1.
Adaptee:方法1
适配 Adaptee 的方法2.
Adaptee:方法2

总结

可以将两个互不相干的类关联在一起,目的为了兼容通用。但是类适配器对于 Java等语言继承受限。满足单一职责原则与开闭原则,当然代码整体复杂度增加。

代码下载

代码下载

相关推荐

  1. 设计模式——适配器模式06

    2024-04-05 20:04:01       18 阅读
  2. 设计模式适配器模式

    2024-04-05 20:04:01       46 阅读
  3. 设计模式——适配器模式

    2024-04-05 20:04:01       36 阅读
  4. 设计模式-适配器模式

    2024-04-05 20:04:01       32 阅读
  5. 设计模式——适配器模式

    2024-04-05 20:04:01       27 阅读
  6. 设计模式-适配器模式

    2024-04-05 20:04:01       29 阅读

最近更新

  1. Eureka应用场景和优势

    2024-04-05 20:04:01       0 阅读
  2. ESP32-C3模组上跑通AES-GCM(5)

    2024-04-05 20:04:01       0 阅读
  3. 如何在电子文件上加盖印章

    2024-04-05 20:04:01       1 阅读
  4. github 下载提速的几种方法

    2024-04-05 20:04:01       1 阅读
  5. 交替打印-GO

    2024-04-05 20:04:01       1 阅读
  6. 秒验 iOS端如何修改授权页背景

    2024-04-05 20:04:01       1 阅读

热门阅读

  1. 设计模式|命令模式(Command Pattern)

    2024-04-05 20:04:01       14 阅读
  2. 每天学习python30分钟(第三天)

    2024-04-05 20:04:01       17 阅读
  3. 设计模式——单例模式04

    2024-04-05 20:04:01       17 阅读
  4. c#版基于Yolov8模型实现的实时视频检测

    2024-04-05 20:04:01       21 阅读
  5. 介绍 TensorFlow 的基本概念和使用场景

    2024-04-05 20:04:01       16 阅读
  6. c++day4

    2024-04-05 20:04:01       13 阅读
  7. C++之类

    C++之类

    2024-04-05 20:04:01      16 阅读
  8. C语言中各进制之间的转换

    2024-04-05 20:04:01       12 阅读
  9. Linux C++ 018-继承

    2024-04-05 20:04:01       14 阅读
  10. TWS蓝牙耳机SDK组成原理

    2024-04-05 20:04:01       11 阅读
  11. leetcode561-Array Partition I

    2024-04-05 20:04:01       12 阅读
  12. UIKit-UIPopoverPresentationController

    2024-04-05 20:04:01       9 阅读
  13. Mysql数据库高级SQL

    2024-04-05 20:04:01       12 阅读