设计模式 - 浅谈适配器模式

适配器模式

模式功能说明:它使得原本由于接口不兼容而不能一起工作的类可以协同工作。

模式思路与原理

  • 类的适配器模式:通过继承来实现适配器功能。当我们要将一个类A转化为接口B的实现类时,可以创建一个新的类,继承类A,实现接口B,然后在新的类中重写接口B的方法,调用类A的方法来实现。
  • 对象的适配器模式:通过组合来实现适配器功能。当我们要将一个对象A转化为接口B的实现对象时,可以创建一个新的类,实现接口B,然后在新的类中创建一个类A的对象,再重写接口B的方法,调用类A的对象的方法来实现。
  • 接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类,实现所有方法,我们写别的类的时候,继承抽象类即可。

案例

类的适配器模式

// 目标接口
interface Target {
    void request();
}

// 适配者类
class Adaptee {
    public void specificRequest() {
        System.out.println("适配者中的业务代码被调用!");
    }
}

// 适配器类
class ClassAdapter extends Adaptee implements Target {
    public void request() {
        specificRequest();
    }
}

// 测试类
public class Client {
    public static void main(String[] args) {
        System.out.println("类的适配器模式测试:");
        Target target = new ClassAdapter();
        target.request();
    }
}

代码如果理解不了的话,可以理解一下下面这个场景:我们有一个220V的电源,我们的笔记本电脑需要20V的电源,这时我们就需要一个电源适配器来将220V的电源转化为20V的电源。在这个例子中,220V的电源就是适配者类,20V的电源就是目标接口,电源适配器就是适配器类。

对象适配器模式

// 适配器类
class ObjectAdapter implements Target {
    private Adaptee adaptee;
    public ObjectAdapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }
    public void request() {
        adaptee.specificRequest();
    }
}

// 测试类
public class Client {
    public static void main(String[] args) {
        System.out.println("对象的适配器模式测试:");
        Adaptee adaptee = new Adaptee();
        Target target = new ObjectAdapter(adaptee);
        target.request();
    }
}

代码如果理解不了的话,可以理解一下下面这个场景:我们有多个电源,例如220V的电源和110V的电源,我们的笔记本电脑需要20V的电源,这时我们就需要一个电源适配器来将这些电源转化为20V的电源。在这个例子中,220V的电源和110V的电源就是适配者对象,20V的电源就是目标接口,电源适配器就是适配器类。

接口适配器模式

// 适配器类
abstract class InterfaceAdapter implements Target {
    public void request() {}
}

// 适配者类
class ConcreteAdapter extends InterfaceAdapter {
    public void request() {
        System.out.println("适配者的代码被调用!");
    }
}

// 测试类
public class Client {
    public static void main(String[] args) {
        System.out.println("接口的适配器模式测试:");
        Target target = new ConcreteAdapter();
        target.request();
    }
}

代码如果理解不了的话,可以理解一下下面这个场景:我们有一个接口,这个接口有很多方法,但是我们只需要实现其中的几个方法,这时我们就可以创建一个抽象类,实现这个接口,然后在抽象类中提供所有方法的默认实现,我们的类只需要继承这个抽象类,然后重写我们需要的方法即可。在这个例子中,接口就是目标接口,抽象类就是适配器类,我们的类就是适配者类。

依赖原则

适配器模式的实现原则是:开闭原则,即对扩展开放,对修改关闭。在适配器模式中,我们可以通过添加一个新的适配器类来提供新的接口,而无需修改原有代码。

end

本文链接:

https://pugqq.com/archives/adapter-pattern.html
设计模式 - 浅谈适配器模式 - I/O
快来做第一个评论的人吧~

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21