//
下列**片斷摘自vc++ 6.0中的stack
// 可以在..vc98/include/stack中找到
template
<
class
_ty,
class
_c =
deque
<
_ty>
>
class
stack
const
value_type
&top()
const
void
push(
const
value_type
&_x)
void
pop()
// ......
protected
:_c c;
};
可以看到stack就是deque的乙個簡單封裝,也可以說stack是deque的乙個介面卡。通過這種簡單的方法,就把deque的方法back(),push_back()和pop_back()給轉換成了stack的top(),push()和pop()。
在上面的**中只是用到了adapter模式中的物件介面卡,還有一種是類介面卡。下面我就用乙個c++的小例子來說明這兩種介面卡的區別和優缺點。
比如我們有乙個檢視系統,可以顯示長方形、正方形和圓形,我們很容易利用composite模式做出如下設計:
(關於composite模式可以參考我的《重讀《設計模式》之學習筆記(五)--我對composite模式的理解》和《visitor模式--《敏捷軟體開發》讀書筆記(三)》)
class
cshape
;virtual
void
draw() =0
;};//
這裡以輸出一句話來代替具體的draw過程
class
crectangle :
public
cshape;};
class
csquare :
public
cshape;};
class
ccircle :
public
cshape;};
class
cview :
public
cshape
}void
draw()
void
addshape(cshape
*pshape)
private
:vector
<
cshape
*>
m_vshape;
};
我們可以用下面的測試函式檢驗上面設計的正確性:
void
test()
現在,我們想在我們的這個檢視系統裡面新增對文字顯示的支援。由於文字的顯示跟圖形的顯示有很大差別,我們決定用別人已經開發好的類。比如下面的ctext 類:
class
ccontext
;virtual
void
drawtext() =0
;};//
這裡也以輸出一句話來代替具體的draw過程
class
ctext :
public
ccontext;};
由於類ctext 的父類不是cshape,而且介面跟我們想要的介面不一樣。為了在我們的系統中使用類ctext 來顯示文字,就可以使用adapter模式建立乙個類ctext 的adapter,使ctext 的介面適應我們已經寫好的檢視系統。
下面使用的是用類介面卡:
class
cshapetext :
public
cshape,
private
ctext
;private
:void
drawtext()
};
類cshapetext就是類ctext的類介面卡,它從類cshape公有繼承介面,而從類ctext私有繼承了實現。這樣我們就可以把cshapetext加入到我們已經開發好的檢視體統裡面了。比如下面這個測試函式:
void
test()
下面用物件介面卡來實現相同的功能:
class
cshapetext :
public
cshape
;void
draw() ;
private
:ccontext
*m_ptext;
};
可以看到,**中通過乙個物件指標來呼叫相應的方法來實現將介面轉換為我們希望得到的介面。下面是乙個新的測試函式:
void
test()
通過上面的**我們可以看出類介面卡和物件介面卡各自的優缺點:
類介面卡:
優點:可以重新定義被適配的類的部分行為。
缺點:不能適配乙個類以及它的子類。
物件介面卡:
優點:可以適配乙個類以及它的所有子類。
缺點:重新定義被適配的類的行為比較困難。
因此,我們可以得出結論:如果要適配乙個類以及它的子類,或者只是簡單的包裝以轉換介面,那就使用物件介面卡;其他情況就用類介面卡。
轉 ADAPTER(介面卡)模式
下列 片斷摘自vc 6.0中的stack 可以在.vc98 include stack中找到 template class ty,class c deque ty class stack const value type top const void push const value type x ...
介面卡模式 Adapter
一句話 什麼是adapter adapter 就是乙個轉換器,比如乙個電源插頭可以讓乙個兩插頭的電器使用牆壁上的三插頭電源。這次的介紹將不寫 雖然設計模式是為了 而生,但我認為這是一種看世界的方法,不僅僅是一種 的設計方式,所以這次的介面卡模式因為比較簡單和容易理解就不再寫 解釋,但介面卡的思想能用...
Adapter 介面卡模式
1.概念 介面卡模式 adapter pattern gof95 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。2.兩種形式 a.類的介面卡模式 b.物件的介面卡模式 3.模擬問題 現在假設我們的程式已經設計了介面request介面,但是...