天天看點

親身實踐,JAVA最優良的Adapter模式--擴充卡模式

網上關于JAVA的擴充卡模式例子有很多,但真的有少實在不怎麼樣,看也不懂。自己總結了一個在性能和結構上都很容易了解的Adapter模式。

在大規模的系統開發過程中,我們常常碰到諸如以下這些情況:

我們需要實作某些功能,這些功能已有還不太成熟的一個或多個外部元件,如果我們自己重新開發這些功能會花費大量時間;是以很多情況下會選擇先暫時使用外部元件,以後再考慮随時替換。但這樣一來,會帶來一個問題,随着對外部元件庫的替換,可能需要對引用該外部元件的源代碼進行大面積的修改,是以也極可能引入新的問題等等。如何最大限度的降低修改面呢?

Adapter模式就是針對這種類似需求而提出來的。

Adapter模式通過定義一個新的接口(對要實作的功能加以抽象),和一個實作該接口的Adapter(擴充卡)類來透明地調用外部元件。這樣替換外部元件時,最多隻要修改幾個Adapter類就可以了,其他源代碼都不會受到影響。

實作Adapter模式的2種方法與範例

Adapter模式通過在Adapter類中調用外部元件來實作功能。

根據調用方式的不同,Adapter模式有2種實作方法:

1,通過繼承實作Adapter

2,通過委讓實作Adapter

為了能更清楚地說明2種實作方法的差別,我們舉例說明:

比如,我們需要實作一個發送郵件的功能,需要用到一個名為OutMailer的外部元件,因為上述原因,我們決定用Adapter模式實作對OutMailer的透明調用。

首先,我們把郵件發送的功能抽象成一個接口:

然後定一個實作IMailer接口的MailerAdapter類。

下面我們來看看MailerAdapter的實作方法。

通過繼承實作Adapter

MailerAdapter.java

通過委讓實作Adapter

不管是通過繼承實作Adapter,還是通過委讓實作Adapter,調用方MailerClient的調用方法完全一樣,如下:

MailerClient.java

我們可以看到,這裡完全沒有直接調用OutMailer,也就是說OutMailer即使被替換了,我們也不用對MailerClient做任何修改。