Adaptor-适配器模式-1
作用:适配器(也叫Wrapper-包装器)将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也就是将“既有内容”转换成“需要结果”,是代码重用的利器之一,Java I/O中应用了这种模式(如ByteArrayInputStream、ByteArrayOutputStream)。形象地:就如同笔记本电脑的电源适配器,一端是220交流电(既有内容),另一端12v直流电(需要结果)。
?
分类:Adaptor模式有两种,类适配器(继承)、对象适配器(委托)?。两种模式各有优劣,具体在代码解析中说明。
?
?示例-类适配器(继承):
?
电源
程序示例
既有内容
交流电220V
Banner类(showWithParen,shoWithAster)
转换装置
适配器
PrintBanner类
需要的结果
直流电12V
Print接口 (PrintWeak,PrintStrong)
?类图查看图片附件:类图-Adapter_1
//------------------------------------------Banner类---------------------------
package adapter;
public class Banner{
?private String strings;
?public Banner(String strings){
??this.strings = strings;
?}
?public void showWithParen(){
?? System.out.println("("+strings+")");
?}
?public void showWithAster(){
??System.out.println("*"+strings+"*");
?}
}
//------------------------------------------PrintBanner类---------------------------
package adapter;
public class PrintBanner extends Banner implements Print{
?public PrintBanner(String strings){
??super(strings);//父类构造函数来初始化~~
?}
?public void printWeak(){
??showWithParen();
?}
?public void printStrong(){
??showWithAster();
?}
}
//------------------------------------------Print接口---------------------------
package adapter;
public interface Print{
?public abstract void printWeak();
?public abstract void printStrong();
}
//------------------------------------------测试类---------------------------
public class Main{
?public static void main(String[] args){
??Print p = new PrintBanner("Hello");
??p.printWeak();
??p.printStrong();
?}
}
?示例-对象适配器(委托):
?类图查看图片附件:类图-Adapter_2
?
//------------------------------------------Banner类---------------------------
??? 同上
//------------------------------------------PrintBanner类---------------------------
package adapter;
public class PrintBanner extends Print{
?????? private Banner banner;
?????? public PrintBanner(String strings){
????????????? this.banner = new Banner(strings);
?????? }
?????? public void printWeak(){
????????????? banner.showWithParen();
?????? }
?????? public void printStrong(){
????????????? banner.showWithAster();
?????? }
}
//------------------------------------------Print类---------------------------
package adapter;
public interface Print{
public abstract class Print{
??? public abstract void printWeak();
??? public abstract void printStrong();
}
//------------------------------------------测试类---------------------------
同上