Adapter(適配器模式)
適配器模式用于填補現(xiàn)有程序和所需程序之間的差異
Adapter模式有以下兩種
- 類適配器模式(使用繼承的適配器)
- 對象適配器模式(使用委托的適配器)
類適配器模式(使用繼承的適配器)
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 + "*");
}
}
PrintBanner(適配器)
public class PrintBanner extends Banner implements Print {
public PrintBanner(String string) {
super(string);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStrong() {
showWithAster();
}
}
Print(需求)
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
對象適配器(使用委托的適配器)
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 + "*");
}
}
PrintBanner(適配器)
//滿足Target的需求
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner(String string) {
//super(string);
this.banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStrong() {
banner.showWithAster();
}
}
Print(需求哥蔚,Target(對象))
//負責(zé)定義所需的方法
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
Main
//Main中不需要知道任何關(guān)于Banner的信息
public static void main(String[] args) {
// write your code here
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
什么時候使用Adapter模式
很多時候,我們并非從零開始編程菌瘪,經(jīng)常會用到現(xiàn)有的類捅彻,特別是當(dāng)現(xiàn)有的類已經(jīng)被充分測試過逮栅,我們更愿意將這些類作為組件復(fù)用艳狐,Adapter模式會對現(xiàn)有的類進行適配给僵,生成新的類
使用Adapter可以在完全不改變現(xiàn)有代碼的前提下使現(xiàn)有代碼適配于新的接口