适配器模式【对象适配器模式和类适配器模式,以及具体使用场景】

时间:2024-10-02 07:08:23

2.1-适配器模式

​ 类的适配器模式是把适配者类的API转换成为目标类的API,适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作,其实在具体的开发中,对于自己系统一开始的设计不会优先考虑适配器模式,通常会将接口设置成兼容的,但是难免会有设计的缺陷,导致接口不兼容的类需要一起工作,这时候就可以使用适配器模式进行转换;其次适配器模式经常用于接入第三方系统,由于第三方系统与我们系统不兼容,我们也不会因为接入这个三方系统而去修改我们现有的接口,因此一般会使用适配器模式进行接口转换。

适配器模式主要包含如下几种角色

  • 适配器类:适配器模式的核心,里面编写适配转换的代码,是一个类
  • 目标类:最终客户端所需要的接口,可以是接口、抽象类、具体类,在适配器中,由于Java不支持类的多继承,因此在Java的类适配器模式中只能是接口,在对象适配器模式中可以是类
  • 适配者类:里面包含了客户端所需要的API,适配者类一般是一个具体的类

​ 适配器模式主要包括两种实现形式,类适配器对象适配器,其实这两种的主要区别就在于适配者类所处的位置,接下来我们分别介绍

2.1.1-类适配器模式

​ 类适配器模式中,适配器类会实现目标类,然后继承适配者类,由于Java类不能多继承,所以适配器模式中目标类只能是一个接口,代码示例如下:

适配者类

/**
 * 适配者
 * @author Liu Hanlin
 * @create 2024-09-30 22:14
 */
public class ClsAdaptee {

    /**
     * 基础请求API
     * @return
     */
    public String baseRequestAPI(){
        return "基础请求API";
    }
}

目标类

/**
 * 目标类
 * @author Liu Hanlin
 * @create 2024-09-30 22:13
 */
public interface ClsTarget {

    /**
     * 目标请求API
     * @return
     */
    String request();
}

适配器类

/**
 * 类适配器
 * @author Liu Hanlin
 * @create 2024-09-30 22:12
 */
public class ClsAdapter extends ClsAdaptee implements ClsTarget{
    @Override
    public String request() {
        return this.baseRequestAPI();
    }
}
2.1.2-对象适配器模式

​ 对象适配器模式中,适配器类会继承或实现目标类,然后将适配者类作为适配器的一个属性,在重写目标类的方法时,调用适配者类的方法,具体代码如下

适配者类

/**
 * 适配者类
 * @author Liu Hanlin
 * @create 2024-09-30 22:20
 */
public class ObjAdaptee {
    /**
     * 基础请求API
     * @return
     */
    public String baseRequestAPI(){
        return "基础请求API";
    }
}

目标类

/**
 * 目标类【对象适配器模式中,目标类可以是抽象类和具体类】
 * @author Liu Hanlin
 * @create 2024-09-30 22:21
 */
public abstract class ObjTarget {
    /**
     * 目标请求API
     * @return
     */
    abstract public String request();
}

适配器类

/**
 * 适配器
 * @author Liu Hanlin
 * @create 2024-09-30 22:20
 */
public class ObjAdapter extends ObjTarget{
    ObjAdaptee adaptee = new ObjAdaptee();

    @Override
    public String request() {
        return adaptee.baseRequestAPI();
    }
}

如上就是适配器模式的具体代码以及具体解释。