本文深入淺出的講述了設計模式中的介面卡模式
,並給出了簡單的示例
,例子淺顯易懂
,並附帶源**。
介面卡模式中的有以下的四種角色:
目標(target)
被適配者
(adaptee)
:定義了乙個已經存在的介面,這個介面需要匹配。
適配者(adapter):
對adaptee
的介面與
target
的介面進行適配。
客戶端(client)
:與符合
target
介面的物件協同。
介面卡模式的意圖是將乙個類的介面轉換成客戶希望的另外的乙個介面。
adapter
模式使得原來由於幾口不相容而不能一起工作的雷可以一起工作。
舉例來說:有乙個類
(adaptee)
實現了數學中的冪次運算,方法中需要傳入兩個引數,乙個是基數
base
,另外乙個是冪次
exp。現在客戶端需要乙個求得乙個數的平方的函式介面
(target)
,傳入乙個數,得到它的平方值。為了復用已經存在的類
adaptee
,適用adapter
來適配adaptee,adapter
實現了target
介面。
使用uml圖表示以上的描述如下:
圖1介面卡模式
客戶端呼叫
target
的介面方法,具體的實現
(adapter)
把需求適配給
adaptee
,最終呼叫
adaptee
的方法來實現客戶端的呼叫請求。
目標介面定義如下所示;
packageadapter;
publicinte***cetarget
adaptee
的介面定義如下所示:
packageadapter;
publicclassadaptee
}介面卡
(adapter)
的介面定義如下所示:
packageadapter;
publicclassadapterimplementstarget
publiclongget2power(longexp)
}客戶端的定義如下:
packageadapter;
publicclassclient
}適用性:你想使用乙個已經存在的類,而他的介面不符合你的需求。你想建立乙個可以復用的類,該類可以與其他不相關的類或不可預見的類協同工作。你想使用一些已經已經存在的子類,但是不可能對每乙個都進行子類化已一匹配他們的介面,物件介面卡可以適配他的父類介面。
介面卡如同乙個常見的變壓器,也如同電腦的變壓器和插線板之間的電源連線線,他們雖然都是
3相的,但是電腦後面的插孔卻不能直接插到插線板上。
作者曾經遇到過乙個
asp程式設計的難題,
asp不是物件導向的,但是卻可以借鑑介面卡模式解決問題。問題是這樣的,在乙個產品表
(product)
中的所有產品都有乙個編號,欄位名字是
bh,每個編號是唯一的,但卻不是主鍵,表中使用乙個自動增長的
id作為主鍵。在產品的詳情頁中使用傳過來的引數
id查詢產品,而在另外的乙個系統中也有乙個同樣的表,需要訪問詳情頁
(已經由另外的乙個程式設計師設計好,並且**晦澀難懂
),由於字段值是自動增長的,兩個表中的主鍵並不對應(在其中的乙個系統中進行刪除新增都會引起
id的增長),在具體的實現中,本人在有詳情頁的系統中新增了乙個頁面
(adapter)
,接受傳過來的產品編號
bh,然後根據編號查詢資料庫得到相應產品的駐鍵id
,最後讓頁面跳轉到詳情頁並傳遞乙個id,在另外的系統中只要得到產品的編號bh,並把bh作為引數傳遞到新增的頁面(adapter)便可以得到正確的結果。
如果覺得寫得好,請一定要支援一下,以給我信心和鼓勵把剩下的模式例子寫出來。
附件:lili00okok
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...
介面卡模式 預設介面卡,類介面卡,物件介面卡
模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...
結合例子理解介面卡模式
介面卡模式 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。書本上給出了乙個很好的例子 nba裡面,姚明是乙個外籍中鋒,他和其他成員的語言不通,那麼他就需要翻譯者來 適配 他,最終使得他能夠很其他的成員一起打球 這裡講到的主要是...