图解设计模式 - Adapter 模式
讀書筆記 僅供參考
Adapter 模式
Adapter 即為是適配器,用來填補兩者之間的差異。就想充電器的裝換器,要把 220v 的電壓轉換為低電壓才能對手機或電腦充電。
Adapter 模式也稱為 Wrapper(包裝器)模式。
兩種 Adapter 模式:
- 類適配器模式(使用繼承的適配器)
- 對象適配器模式(使用委托的適配器)
角色
Client 類是客戶端,調用適配器。
Adaptee 是需要包裝的類,等于是 220V 電壓的接頭。
Target 接口是供客戶端調用的接口,它定義了適配器需要實現的方法,等于是手機充電轉化器的 USB 插口。
Adapter 類是適配器類,它繼承了 Adaptee 類和實現類 Target 接口,等于轉換器的內部構造,清楚如何將電壓從 220V 轉為 5V。
代碼
https://github.com/wujunyucg/DesignPattern/tree/master/src/chapter01/adapter
類適配模式
UML
例子
Banner 類,作為 Adaptee,實現了最初的方法。
public class Banner {private String string;public Banner(String string) {this.string = string;}public void showWithPattern() {System.out.println("(" + string + ")");}public void showWithStar() {System.out.println("*" + string + "*");} }Print 接口,定義了客戶端調用的方法,作為 Target
public interface Print {void printWeek();void printStrong(); }PrintBanner 類,繼承了 Banner 和實現了 Target,作為 Adpter
public class PrintBanner extends Banner implements Print{public PrintBanner(String string) {super(string);}@Overridepublic void printWeek() {showWithPattern();}@Overridepublic void printStrong() {showWithStar();} }Main 類,測試效果
public class Main {public static void main(String[] args) {Print print = new PrintBanner("Hello");print.printWeek();print.printStrong();} }在這個例子中,Main 調用 PrintBanner 的方法,實際上起作用的是 Banner 類中的方法,Main 并不知道其中的實現是怎樣的。
例子 UML
對象適配器模式
對象適配器模式即是使用委托的模式,使用組合來替代繼承。
UML
這張圖和上面一張圖的區別是 Adapter 并不是繼承 Adaptee 和 實現 Target 了。
Adaptee 的實例作為 Adapter 的一個屬性。Target 并不是一個接口,而是一個抽象類,同樣定義了供 Client 調用的方法,Adapter 繼承了 Target 類。
程序例子
Main 和 Banner 的程序和上面一樣。
Print 類,為抽象類。
public abstract class Print {public abstract void printWeek();public abstract void printStrong(); }PrintBanner 類,擁有一個 Banner 實例,繼承了 Print 類。在實現哦方法中調用了 Banner 的方法。
public class PrintBanner extends Print{private Banner banner;public PrintBanner(String string) {this.banner = new Banner(string);}@Overridepublic void printWeek() {banner.showWithPattern();}@Overridepublic void printStrong() {banner.showWithStar();} }例子 UML
何時使用 Adapter 模式
復用已有組件
我們更傾向于不修改已有程序的代碼,并且能夠更多的復用已存在的“組件”。Adapter 模式會對現有類進行適配,生成新的類,當出現 BUG 時,我們也能確定出現問題的是 Adapter 類,而不是 Adaptee 類。
沒有現成的代碼
有時候我們會想到把現有程序改一改就可以成功運行了,但有時候我們只能使用一些特定的接口,無法知道源代碼,這樣 Adapter 模式就可以發揮作用了。
版本升級與兼容性
使用 Adapter 模式可以很好地解決軟件版本升級后出現的兼容性問題。
相關設計模式
Bridge 模式
Adapter 模式用于連接接口不同的類,Bridge 模式用于連接類的功能層次結構和實現層次結構
Decorator 模式
Decorator 模式是在不改變接口的前提下添加功能。
總結
以上是生活随笔為你收集整理的图解设计模式 - Adapter 模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery表单美化组件实例
- 下一篇: win7桌面快捷方式图标修复方法