天天看點

設計模式之擴充卡模式(adaptor pattern)

在設計模式中,擴充卡模式(英語:adapter pattern)有時候也稱包裝樣式或者包裝(wrapper)。将一個類的接口轉接成使用者所期待的。一個适配使得因接口不相容而不能在一起工作的類工作在一起,做法是将類自己的接口包裹在一個已存在的類中。

比如我們去日本買了一個日本的電鍋,但日本電壓标準都是110v,而我們國家标準是220v,是以要想在中國用日本電鍋,需要一個電源擴充卡。

比如我們有一個micro sd卡,如果我們想在筆記本上用,就需要一個讀卡器做為擴充卡

java jdk 1.1 提供了 enumeration 接口,而在 1.2 中提供了 iterator 接口,想要使用 1.2 的 jdk,則要将以前系統的 enumeration 接口轉化為 iterator 接口,這時就需要擴充卡模式。

java 中的 jdbc。

系統需要使用現有的類,而此類的接口不符合系統的需要。

想要建立一個可以重複使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在将來引進的類一起工作,這些源類不一定有一緻的接口。

通過接口轉換,将一個類插入另一個類系中。(比如老虎和飛禽,現在多了一個飛虎,在不增加實體的需求下,增加一個擴充卡,在裡面包容一個虎對象,實作飛的接口。)

優點:

1. 可以讓任何兩個沒有關聯的類一起運作。

2. 提高了類的複用。

3. 增加了類的透明度。

4. 靈活性好。

缺點:

1. 過多地使用擴充卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是 a 接口,其實内部被适配成了 b 接口的實作,一個系統如果太多出現這種情況,無異于一場災難。是以如果不是很有必要,可以不使用擴充卡,而是直接對系統進行重構。

2. 由于 java 至多繼承一個類,是以至多隻能适配一個适配者類,而且目标類必須是抽象類。

設計模式之擴充卡模式(adaptor pattern)

我們就拿日本電鍋的例子進行說明,日本電鍋電源接口标準是110v電壓,而中國标準電壓接口是220v,是以要想在中國用日本電鍋,需要一個電源轉換器。

我們先定義日本220v電源接口和實作。

110v接口:

110V接口實作:

我們再定義中國220v電源接口和實作。

220v接口:

220v接口實作:

要想在中國使用日本電鍋,需要把電鍋110v的電源接口适配成我們220v的電源接口,這就需要一個電源擴充卡:

擴充卡繼承的是要适配的接口,并持有對客戶的接口的引用。

下面正式開始啦,現在我們有一個日本電鍋,用的是110v的電源接口:

電鍋用的是110v接口

測試類:

擴充卡繼承了110v接口,就可以用于日本電鍋;擴充卡又持有220v接口的引用,就可以用220v進行工作。

運作結果: