[OOD] 介面卡模式

Horky發表於2015-04-21

背景

世界上電源插頭標準很多, 這裡只說國標和英標:
中國標準:



英國標準:



各地插頭標準不同帶來的另一個問題是各地的標準插座主要針對當地插頭設計。 常在世界各地跑的朋友都知道一定要配個轉接頭, 比如這個:



這個轉換頭名稱是World Travel Adapter, 所起的作用就是適配。(嚴格來說,上面的轉接頭還應用了工作方法。)
*另一種形式是由插座提供適配,作用是一樣的。


在軟體領域裡,我們也常常需要對接兩種不同的介面。在設計上有兩種模式可以參考。下面以檔案操作適配到資料庫操作的介面卡為例。
1. 多重繼承



這樣在Adapter裡CreateDB()的處理就是呼叫FileAPI::Open();


2. 組合模式

這時Adapter::CreateDB()實現就是adaptee_->Open();


討論

介面卡模式常常與橋接模式相比較,兩者最大的不同在於解決的問題不同。介面卡用於對接兩個不同的介面,而橋接則主要為了隔離變化。從應用上來說,一個是被動的,一個是主動的。 所謂被動的,就是當前的介面的差異是無法輕易改變的,必須引入一箇中間層來解決。而中間層的引入往往帶有效能、以及不必要的資料拷貝等開銷,詳細參考關於層的反模式討論
如果介面是可控,就要儘量避免介面不一致的情形。而不是等待使用Adapter來處理。


相關文章