zl程序教程

您现在的位置是:首页 >  其他

当前栏目

详解设计模式-Adapter模式

2023-04-18 12:36:31 时间

文章概览

1. Adapter模式

如果想让额定工作电压是直流12V的笔记本电脑在交流100V的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的100V电压转换成我们需要的12V电压。这就是适配器所完成的工作,它工作在实际情况与需求之间,弥补两者之间的差距。

在程序世界中,经常会存在现有程序无法直接使用的问题,需要做适当的变换之后才能使用。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。 Adapter模式也被称为Wrapper模式。Wrapper有“包装器”的意思,就像用精美的包装纸将商品包成礼物那样,替我们把某样东西包起来,使其能够用于其他用途。 Adapter模式有两种:

  • 类适配器模式(使用继承的适配器)
  • 对象适配器模式(使用委托的适配器)

2.示例程序1(使用继承的适配器)

这是一段会将输入的字符串显示为(Hello)或者*Hello*的简单程序。 目前在Banner类中,有将字符串用括号括起来的showWithParen方法,和将字符串用*号括起来的showWithAster方法。我们假设这个Banner类是类似上面所说的交流100V的实际情况。

假设Print接口中声明了两种方法,即弱化字符串显示(加括号)的printWeak和强调字符串的printStrong方法。我们假设这个接口是类似上面所说的直流12V的需求。

现在要做的就是使用Banner类编写一个实现了Print接口的类,也就是说要做一个将交流100V转换成直流12V的适配器。

扮演适配器角色的是PrintBanner类。该类继承了Banner类并实现了“需求”–Print接口。

类图

(待补充)

Banner类

假设Banner类是现在的实际情况。

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 + "*");
    }
}

Print接口

假设Print接口是“需求”的接口。

public interface Print {
    public abstract void printWeak();
    public abstract void printStrong();
}

PrintBanner类

PrintBanner扮演适配器的角色。

public class PrintBanner extends Banner implements Print{
    public PrintBanner(String string) {
        super(string);
    }

    public void printWeak() {
        showWithParen();
    }

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

Main类

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

运行结果

未完待续