日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

图解设计模式 - Adapter 模式

發布時間:2024/8/1 asp.net 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解设计模式 - 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 模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。