【设计模式】适配器模式(Adapter Pattern)

23种设计模式之适配器模式(Adapter Pattern)

基本概念

适配器模式(Adapter Pattern)属于结构型设计模式,它的作用是将一个类的接口转换成客户希望的另外一个接口。适配器让原本由于接口不兼容而不能一起工作的类可以协同工作。

结构组成

配器模式包括三个角色:目标抽象类(Target)、适配器类(Adapter)和被适配者类(Adaptee)

  • 目标抽象类(Target):定义了客户端使用的与特定领域相关的接口,也就是客户端需要的方法。
  • 适配器类(Adapter):通过继承或者组合方式,将被适配者类的接口与目标抽象类的接口转换起来,使得客户端可以按照目标抽象类的接口进行操作。
  • 被适配者类(Adaptee):已经存在的、功能稳定的类,在这里指的是需要适配的类。

两种实现方式

  • 类适配器模式:通过继承来实现适配器功能;

  • 对象适配器模式:通过组合来实现适配器功能。

    适配器模式在实际开发中非常常见,比如我们经常需要连接各种不同的数据库,每种数据库都有自己独特的接口和方法。
    如果我们希望写出一段通用的代码,能够连接到任何一种数据库并执行相同的操作,那么适配器模式就非常适合解决这个问题。

小栗子

类适配器模式

我们实现将220V电压转换成5V电压的功能。

目标接口

/**
 * @Classname Voltage5V
 * @Description TODO 目标接口
 * @Date 2023/7/25 09:05
 * @Created by wangxianlin
 */
public interface Voltage5V {
    int output5V();
}

源接口

/**
 * @Classname Voltage220V
 * @Description TODO 源接口
 * @Date 2023/7/25 09:05
 * @Created by wangxianlin
 */
public class Voltage220V {
    public int output220V() {
        return 220;
    }
}

适配器类

/**
 * @Classname VoltageAdapter
 * @Description TODO 适配器类
 * @Date 2023/7/25 09:06
 * @Created by wangxianlin
 */
public class VoltageAdapter extends Voltage220V implements Voltage5V{

    @Override
    public int output5V() {
        int src = output220V();
        System.out.println("原始电压:" + src + "V");
        int dst = src / 44; // 将220V电压转换成5V电压
        System.out.println("转换后电压:" + dst + "V");
        return dst;
    }
}

客户端代码

/**
 * @Classname Client
 * @Description TODO 客户端代码
 * @Date 2023/7/25 09:06
 * @Created by wangxianlin
 */
public class Client {
    public static void main(String[] args) {
        Voltage5V adapter = new VoltageAdapter();
        int output5V = adapter.output5V();
        System.out.println("输出电压:" + output5V + "V");
    }
}
原始电压:220V
转换后电压:5V
输出电压:5V

在上面的示例代码中,我们首先定义了目标接口Voltage5V和源接口Voltage220V,其中Voltage220V代表原始的220V电压。

对象适配器模式

介绍:

  • (1)基本思路和类的适配器模式相同,只是将Adapter类作修改,不是继承src而是持有src类的实例,以解决兼容性的问题。
  • (2)根据 “合成复用原则” ,在系统中尽量使用关联关系来替代继承关系。

适配器类

/**
 * @Classname VoltageAdapter
 * @Description TODO 对象适配器模式-适配器类
 * @Date 2023/7/25 09:06
 * @Created by wangxianlin
 */
public class VoltageAdapterNew implements Voltage5V{

    private Voltage220V voltage220V;

    public VoltageAdapterNew(Voltage220V voltage220V) {
        super();
        this.voltage220V = voltage220V;
    }

    @Override
    public int output5V() {
        int src = voltage220V.output220V();
        System.out.println("原始电压:" + src + "V");
        int dst = src / 44; // 将220V电压转换成5V电压
        System.out.println("转换后电压:" + dst + "V");
        return dst;
    }
}

客户端

/**
 * @Classname Client
 * @Description TODO 客户端代码
 * @Date 2023/7/25 09:06
 * @Created by wangxianlin
 */
public class Client {
  public static void main(String[] args) {
    Voltage5V adapter = new VoltageAdapterNew(new Voltage220V());
    int output5V = adapter.output5V();
    System.out.println("输出电压:" + output5V + "V");
  }
}

输出结果

原始电压:220V
转换后电压:5V
输出电压:5V

你可能感兴趣的:(设计模式,设计模式,适配器模式,oracle)