適配器模式就是將原來的方法進行包裝,轉化爲新的方法,UML圖如下:
/*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();
}
/*適配器*/
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();
}
}
以上是繼承方式來實現適配器,用戶完全看不到被裝配的類Banner;也就不知道其內部的實現。
下面是使用委託方式實現適配器:
/*適配器*/
public class PrintBanner implements Print{
private Banner banner;
public PrintBanner(String string){
this.banner = new Banner(string);
}
public void printWeak(){
showWithParen();
}
public void printStrong(){
showWithAster();
}
}
兩種方式區別:繼承方式是通過繼承來調用父類方法實現轉化。委託方式是通過內部的一個實例對象來是實現轉化。