如果想让额定工作电压是直流12V的笔记本电脑在交流100V的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的100V电压转换成我们需要的12V电压。这就是适配器所完成的工作,它工作在实际情况与需求之间,弥补两者之间的差距。
在程序世界中,经常会存在现有程序无法直接使用的问题,需要做适当的变换之后才能使用。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。 Adapter模式也被称为Wrapper模式。Wrapper有“包装器”的意思,就像用精美的包装纸将商品包成礼物那样,替我们把某样东西包起来,使其能够用于其他用途。 Adapter模式有两种:
这是一段会将输入的字符串显示为(Hello)或者*Hello*的简单程序。 目前在Banner类中,有将字符串用括号括起来的showWithParen方法,和将字符串用*号括起来的showWithAster方法。我们假设这个Banner类是类似上面所说的交流100V的实际情况。
假设Print接口中声明了两种方法,即弱化字符串显示(加括号)的printWeak和强调字符串的printStrong方法。我们假设这个接口是类似上面所说的直流12V的需求。
现在要做的就是使用Banner类编写一个实现了Print接口的类,也就是说要做一个将交流100V转换成直流12V的适配器。
扮演适配器角色的是PrintBanner类。该类继承了Banner类并实现了“需求”–Print接口。
(待补充)
假设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接口是“需求”的接口。
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner扮演适配器的角色。
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
}
public void printWeak() {
showWithParen();
}
public void printStrong() {
showWithAster();
}
}
public class Main {
public static void main(String args[]) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
未完待续