第二章: Adapter 模式
Adapter模式分為兩種:
1.類適配器模式
2.委托適配器
我看的是《圖解設計模式》這本書,這小鬼子說的話真難懂,只能好好看代碼理解。
先說適配器模式要表達的什么意思,首先這個名字就很容易聯想到電源適配器,一個道理,我要充電,但你不能讓我直接把電線插進插座,這樣肯定會沖爆,我用不了這么多電啊! 這時候就需要一個適配器,給電壓轉換一下充的舒舒服服的,就這意思。
實際發開中,有一個類庫寫了很多方法,但我只需要其中一兩個,那么就寫一個適配器,把這兩個方法拿出來用,要是出了Bug,就直接去Adapter里面找,而不是去翻那個類庫。
實際編碼實現(類適配):
Banner類所扮演的角色是(Adaptee(被適配)),它內部擁有兩個方法,很簡單的打印語句:
package example.adapter; public class Banner { private String string; public Banner(String string) { super(); this.string = string; } public void showWithPeren() { System.out.println("(" + string + ")"); } public void showWithAster() { System.out.println("*" + string + "*"); } }
Print是需求,你需要什么?
package example.adapter; public interface Print { public abstract void printWeak(); public abstract void printStrong(); }
PrintBanner是適配器,實現需求,繼承Banner,對外提供Banner的構造和需要的方法:
package example.adapter; public class PrintBanner extends Banner implements Print{ public PrintBanner(String string) { super(string); } @Override public void printWeak() { showWithPeren(); } @Override public void printStrong() { showWithAster(); } }
Main測試:
package example.adapter; public class Main { public static void main(String[] args) { Print p = new PrintBanner("HelloWorld"); p.printWeak(); p.printStrong(); } }
實際編碼實現(委托):
將Print和PrintBanner稍作改動:
現在,PrintBanner里面擁有了Banner的成員並在構造方法里面實例化進行調用。
package example.adapter.two; public class PrintBanner extends Print{ private Banner banner; public PrintBanner(String string) { super(); this.banner = new Banner(string); } @Override public void printWeak() { banner.showWithPeren(); } @Override public void printStrong() { banner.showWithAster(); } }
package example.adapter.two; public abstract class Print { public abstract void printWeak(); public abstract void printStrong(); }
