Adapter模式

在编程的过程中,我们会发现有些程序无法直接使用,需要做适当的变换之后才能使用。这种用于填补“现有程序”和“所需程序”之间的差异的设计模式就是Adapter模式。

Adapter模式有以下两种:

类适配器模式(使用继承的适配器)

对象适配器模式(使用委托的适配器)

如果想让额定工作电压是12V的笔记本电脑在交流100V的电源下工作,通常会使用电源适配器。从而可以解决供需之间的电压不同。

类适配器模式(使用继承的适配器)

类图

代码示例

Banner(交流100V)

/**
 * 比喻: 100V交流电
 *
 * Created by xuefeihu on 18/4/11.
 */
public class Banner {

    private String string;

    public Banner (String string) {
        this.string = string;
    }

    public void showWithParen() {
        System.out.println("(" + string + ")");
    }

    public void showWithAster() {
        System.out.println("*" + string + "*");
    }

}

PrintBanner(适配器)

/**
 * 比喻: 适配器
 *
 * Created by xuefeihu on 18/4/11.
 */
public class PrintBanner extends Banner implements Print {

    public PrintBanner (String string) {
        super(string);
    }

    public void printWeak() {
        showWithParen();
    }

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

Print(直流12V)

/**
 * 比喻: 直流12V
 *
 * Created by xuefeihu on 18/4/11.
 */
public interface Print {

    void printWeak();

    void printStrong();

}

Main(测试入口)

/**
 * 测试入口: 使用继承模式
 *
 * Created by xuefeihu on 18/4/11.
 */
public class Main {

    public static void main(String[] args) {
        Print p = new PrintBanner("Hello");
        p.printWeak();
        p.printStrong();
    }

}

类适配器模式(使用委托的适配器)

类图


代码示例

Print

/**
 *
 *
 * Created by xuefeihu on 18/4/11.
 */
public abstract class Print {

    public abstract void printWeak();

    public abstract void printStrong();

}

PrintBanner

/**
 * Created by xuefeihu on 18/4/11.
 */
public class PrintBanner extends Print {

    private Banner banner;

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

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

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

}

Main

/**
 * 测试入口: 使用继承模式
 *
 * Created by xuefeihu on 18/4/11.
 */
public class Main {

    public static void main(String[] args) {
        Print p = new PrintBanner("Hello");
        p.printWeak();
        p.printStrong();
    }

}


参考:《图解设计模式》