设计模式(适配器模式)
第二章 设计模式之适配器模式(Adapter)
一、Adapter模式介绍
适配器模式位于实际情况和需求之间,填补两者之间的差距。
二、示例程序1(使用继承的适配器)
1.示例程序示意图
程序表示输入hello字符串,输出为(hello)或者*hello*的简单程序。
扮演适配器角色的是PrintBanner类。该类继承了Banner类并实现了“需求”–Print接口。
2.Banner类
package cn.pp.adapter.extend;
public class Banner {
private String str;
public Banner(String str) {
this.str = str;
}
public void showWithParen() {
System.out.println("(" + str + ")");
}
public void showWithAster() {
System.out.println("*" + str + "*");
}
}
3.Print类
public interface Print {
public void printWeak();
public void printStrong();
}
4.PrintBannerAdapter类
public class PrintBannerAdapter extends Banner implements Print {
public PrintBannerAdapter(String str) {
super(str);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
5.Main类
public static void main(String[] args) {
Print print = new PrintBannerAdapter("我是适配器");
print.printStrong();
print.printWeak();
}
二、示例程序2(使用委托的适配器)
1.示例程序示意图
如果类Print不是一个接口而是一个类,由于java不能多继承,所以只有采用委托的适配器模式。
PrintBanner类中的banner字段保存了Banner类的示例,通过构造函数注入。
2.Banner类
package cn.pp.adapter.extend;
public class Banner {
private String str;
public Banner(String str) {
this.str = str;
}
public void showWithParen() {
System.out.println("(" + str + ")");
}
public void showWithAster() {
System.out.println("*" + str + "*");
}
}
3.Print类
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
4.PrintBannerAdapter类
public class PrintBannerAdapter extends Print {
private Banner banner;
public PrintBannerAdapter(String str) {
this.banner = new Banner(str);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
5.Main类
public static void main(String[] args) {
Print print = new PrintBannerAdapter("我是适配器");
print.printStrong();
print.printWeak();
}