在编程的过程中,我们会发现有些程序无法直接使用,需要做适当的变换之后才能使用。这种用于填补“现有程序”和“所需程序”之间的差异的设计模式就是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();
}
}
类适配器模式(使用委托的适配器)
类图
代码示例
/**
*
*
* 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();
}
}
参考:《图解设计模式》
链接:http://moguhu.com/article/detail?articleId=66