一、适配器模式简介
“换个包装再度利用”,适配器的功能就是介入既有内容和需要的结果之间,作为沟通的桥梁。
Adapter Pattern又称Wrapper Pattern,Wrapper 意为“包装纸”,好像一件平平无奇的商品,经过包装纸一番装扮后,摇身一变成为送人的礼品。某物具有转换能力就意味着它做适配器、包装器。
二、样例1——继承
程序利用类的适配器模式,输出(Hello)以及*Hello*
实体类Banner
package AdapterExtends;
public class Banner {
private String title;
public Banner(String title){
this.title = title;
}
public void showWithParen(){
System.out.println("("+title+")");
}
public void showWithAster(){
System.out.println("*"+title+"*");
}
}
Print接口
package AdapterExtends;
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner实现类
package AdapterExtends;
public class PrintBanner extends Banner implements Print {
public PrintBanner(String title) {
super(title);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
测试类
package AdapterExtends;
public class TestAdapterExtends {
public static void main(String[] args) {
Print ad = new PrintBanner("Hello");
ad.printStrong();
ad.printWeak();
}
}
结果
三、样例2——委托
这回小改一番,将Print接口改为抽象类
package AdapterDelegation;
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner实现类
package AdapterDelegation;
import AdapterExtends.Banner;
/*Banner委托PrintBanner执行原来的方法*/
public class PrintBanner extends Print{
private Banner banner;
public PrintBanner(String title){
this.banner = new Banner(title);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
测试类
package AdapterDelegation;
/*通过PrintBanner的构造方法产生Banner对象,将数据存在banner字段内*/
public class TestAdapterDelegation {
public static void main(String[] args) {
/*声明抽象类Print对象,实例化PrintBanner对象*/
Print ad = new PrintBanner("HelloDelegation");
ad.printStrong();
ad.printWeak();
}
}
结果