[OOD] 適配器模式

背景

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



英國標準:



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



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


在軟件領域裏,我們也常常需要對接兩種不同的接口。在設計上有兩種模式可以參考。下面以文件操作適配到數據庫操作的適配器爲例。
1. 多重繼承



這樣在Adapter裏CreateDB()的處理就是調用FileAPI::Open();


2. 組合模式

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


討論

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章