适配器模式

分类

  1. 类适配器模式
  2. 对象适配器模式

类适配器是由继承关系构成,对象适配器是聚合或组合的关系构成所以类适配器耦合性较高,使用较少

角色/结构

  1. 目标接口:我们中国的手机充电器
  2. 适配者类:欧洲那边已有的欧洲标准的插座
  3. 适配器类:可以把我们的手机充电器调整到可以用欧洲插座的适配器

类适配器

个人见解

  1. 代码实现上:其实就是适配器类起了"和亲"的作用,通过同时实现一方,又继承另一方的方式来实现,既是适配者类又是目标接口类,当然实现的那方必须是目标接口类(毕竟你可以直接通过继承来调用它的方法)
  2. 类的抽象上:其实适配者类和目标接口在概念上可以互换!(当然得在双方都有接口和实现类的情况上)(警示1.需要类在抽象是否清晰定义2.我们能否利用这种特性,实现双头蛇效果)

问题:

  1. 不符合合成复用原则
  2. 必须在适配者类有接口的情况下

对象适配器

解决了类适配器的问题

区别把目标接口类聚合在我们的适配器类里面,也即是代码上所谓的"适配"变成通过实现适配者接口或者类然而实际上调用目标接口类来实现

/**
 * @author:天才玩家M
 * @date:2023/8/1 20:31
 * @description:适配器类
 */
public class TFAdapterSD implements SDCard {
    private TFCard tfCard;

    public TFAdapterSD(TFCard tfCard) {
        this.tfCard = tfCard;
    }

    @Override
    public String readSD() {
        System.out.println("通过Adapter适配中,调用READ");
        return tfCard.readTF();
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("通过Adapter适配中,调用WRITE");
        tfCard.writeTF(msg);
    }
}

接口适配器

使用场景

只需要对某两个类之间的一个方法进行适配

与老师代码的不同

老师的是要通过一个抽象类来默认实现原先方法,这种方法自然可以,不过无形中复杂了类之间的关系与结构,所以我直接用接口的默认方法来实现了

然后adapter具体需要适配哪个方法,就需要再去具体实现一下

应用场景

  • 以前开发的系统存在满足新系统功能需求的类,但其接口同新系统的接口不一致。
  • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
posted @ 2023-08-01 21:44  海山了-  阅读(24)  评论(0编辑  收藏  举报