介面卡模式可以將乙個類的介面轉換成客戶端希望的另乙個介面,使得原來由於介面不相容而不能在一起工作的那些類可以在一起工作。通俗的講就是當我們已經有了一些類,而這些類不能滿足新的需求,此時就可以考慮是否能將現有的類適配成可以滿足新需求的類。介面卡類需要繼承或依賴已有的類,實現想要的目標介面。
缺點:過多地使用介面卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到呼叫的是 a 介面,其實內部被適配成了 b 介面的實現,乙個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用介面卡,而是直接對系統進行重構。
類模式的 adapter 實現
//目標介面
class
target
;//適配者類
class
adaptee};
//介面卡類
class
adapter
:public target,
private adaptee};
intmain()
物件模式的 adapter 實現
class
target
;class
adaptee};
class
adapter
:public target
void
request()
};intmain()
舉例
在stl中就用到了介面卡模式。stl實現了一種資料結構,稱為雙端佇列(deque),支援前後兩段的插入與刪除。stl實現棧和佇列時,沒有從頭開始定義它們,而是直接使用雙端佇列實現的。這裡雙端佇列就扮演了介面卡的角色。佇列用到了它的後端插入,前端刪除。而棧用到了它的後端插入,後端刪除。假設棧和佇列都是一種順序容器,有兩種操作:壓入和彈出
class
sequence
;class
deque
void
push_front
(int x)
void
pop_back()
void
pop_front()
};//棧 先進後出
class
stack
:public sequence,
private deque
void
pop()}
;//佇列 先進先出
class
queue
:public sequence,
private deque
void
pop()}
;int
main()
class
sequence
;class
deque
void
push_back
(int x)
void
pop_front()
void
pop_back()
};//堆疊 先入後出
class
stack
:public sequence
void
push
(int x)
void
pop()}
;class
queue
:public sequence
void
push
(int x)
void
pop()}
;int
main()
常見設計模式之 介面卡模式
常用的問題 比如手機 電腦等的充電器,轉換接頭都相當於乙個介面卡。類似這種資料轉換的馬上想到介面卡模式 package myadapter description 介面卡模式 author potter date 2012 8 14 下午11 17 12 version v1.0 public st...
C 設計模式 介面卡模式
生活中的介面卡 買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的220v高電壓轉換成這些電子產品能工作的5v 20v左右穩定的低電壓,使它們能正常工作。就是說,如果沒有這個電源介面卡,我...
C 設計模式 介面卡模式
生活中的介面卡 買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的220v高電壓轉換成這些電子產品能工作的5v 20v左右穩定的低電壓,使它們能正常工作。就是說,如果沒有這個電源介面卡,我...