1. 程式人生 > >設計模式之適配器模式(Adapter)

設計模式之適配器模式(Adapter)

功能 系統 第三方 抽象 可能 對象 期待 技術分享 適配器

我想要是說適配器模式,提一下“電壓”、“耳機”、“充電器”和 "USB” 的例子應該是比較恰當的了。就說說自己的親身經歷,我原來的手機是NOKIA5730。後來也不知道有沒有國行,但是不推薦大家買這款手機,不適用的哈。我買的時候只有港貨,可是大家知道的啊,香港的充電器和我們大陸的充電器規格是不一樣的,那我要是在國內充電,原機帶的充電器根本用不了,所以要花25RMB買一個公牛的適配器,這樣才可以充電!!

1.初識適配器模式

我想作為一個IT人士,對於適配器應該不陌生,只不過要從理論上講可能描述的不夠到位。實際上,好多系統的開發,都要用到第三方軟件,這樣的話,第三方軟件的接口和我們開發的軟件的接口往往是不一致的,那麽這時候就要“適配”了。看看GoF對適配器模式的說法:


適配器模式:將一個類的接口轉換成客戶希望的另外一個接口,適配器模式使得由於接口不兼容而不能一起工作的那些類可以一起工作!!!


一般情況下,適配器包含下面的幾個角色:

目標抽象角色(Target) : 定義客戶所期待要使用的接口,我們把手機當做客戶端,客戶端所需要使用充電器是大陸標準。

源角色(Adaptee) : 需要被適配的接口,在這裏指的是我的手機買的時候自帶的港版充電器。

適配器角色(Adapter) :用來把源接口轉換成符合要求的目標接口的設備,在這裏指的是我自己買的公牛的適配器。

客戶端(Client) :這裏指的就是我那個港版的手機了。

現在來看看適配器模式的結構圖:

              技術分享

註:這裏我們只說一致適配器模式:對象適配器模式,而不談類適配器模式。

2.實現適配器模式的例子

現在,我們看看適配器模式到底是怎麽實現的,怎麽就能“在大陸使用港版的充電器了呢??”

技術分享View Code

觀察代碼和運行結果,得知策略模式確實是實現了!!確實完成了在大陸使用港版充電器的目的了。那麽我們想一想利用適配器模式有什麽好處呢?不妨假設一下,現在我又在歐洲買了一個手機,這時手機又不能再大陸充電了,怎麽辦呢?這時我們只需要在寫一個類繼承TargetCharget類完成對歐版充電器的適配,這樣我們有能很方便的會用歐洲的手機。怎麽樣?使用適配器模式還能提供統一的接口。
3.實現適配器模式的場合和好處

首先,必須強調的是,適配器模式適用於使用第三方軟件的情況,並且第三方軟件提供的接口和我們開發的系統接口不一致,同時我們正在開發的系統想要改變接口已經不容易了,這時候使用適配器就比較好。其實,適配器模式更像是一個彌補型的模式,當接口不一致時,並且系統開發已經進入了很難改變的時候,這時候可以使用適配器模式,但是如果在開發的早期就發現了接口不一致,盡量不要采用適配器模式,而是最後把接口設計的一致比較好。也就是說適配器模式大部分在軟件開發後期使用的一種設計模式。

具體適用的場合:

1.正在開發的系統想使用一個已經存在的類,並且該類很重要,但是該類提供的接口和系統不一致。

2.使用了第三方軟件,並且第三方提供的軟件的接口和系統不一致。

3.兩個已經存在的類完成的功能一致,但是接口不一樣。可以采用適配器模式,提供一致的接口。

4.對舊系統的復用。

使用適配器模式的好處:

1.充分利用已經存在的資源,實現軟件的復用,節省開發成本和時間。

設計模式之適配器模式(Adapter)