适配器模式

133 阅读2分钟

定义

在程序的世界中,经常会存在现有的程序无法直接使用,需要做适当的变换后才能使用的情况。这种用于填补“现有程序”和“所需程序”之间差异的设计模式就是适配器模式;

以个人的角度简单来说 :就是一个类中的方法,通过其他类中的方法进行调用;

主要角色

Target(对象)

负责定义所需的方法,即适配器中的方法

Client(请求者)

该角色负责使用Target角色所定义的方法进行具体处理

Adaptee(被适配)

这是一个被适配的角色,持有既定方法的角色

Adapter(适配)

Adapter 模式的主人公,使用 Adapter 角色方法,来满足 Target 角色的需求,这就是 Adapter 模式的目的

代码实例

类适配器模式

Target 对象

public interface Print {
    void printWeek();

    void printStrong();
}

Adaptee 被适配对象

public class Banner {
    public void showWithParen() {
        System.out.println(1);
    }

    public void showWithAster() {
        System.out.println(2);
    }
}

Adapter 适配对象

public class PrintBanner extends Banner implements Print{
    @Override
    public void printWeek() {
        showWithParen();
    }

    @Override
    public void printStrong() {
        showWithAster();
    }
}

对象适配器模式

Target 对象

public class Print {
    public void printWeek() {

    }

    public void printStrong() {

    }
}

Adaptee 被适配对象

public class Banner {
    public void showWithParen() {
        System.out.println(1);
    }

    public void showWithAster() {
        System.out.println(2);
    }
}

Adapter 适配对象

public class PrintBanner extends Print {
    private Banner banner;


    public PrintBanner() {
        this.banner = new Banner();
    }

    @Override
    public void printStrong() {
        banner.showWithAster();
    }

    @Override
    public void printWeek() {
        banner.showWithParen();
    }
}

作用

  1. 组件复用

当现有的类已经被充分测试过了,bug很少,而且已经被用于其他软件中时,我们更愿意将这些类作为组件来复用

  1. 版本迭代

让新版本扮演adaptee对象,旧版本扮演target对象,接着编写一个扮演adapter角色的类,让它使用新版本的类来实现旧版本的类中的方法

  1. 适配其他代码

可以在完全不改变现有代码的前提下使现有代码适配于新的接口