今天學習了橋模式,但是,我發現它和裝飾模式有很像的地方。
書上對橋模式的定義很容易的想到橋模式可能重點在於兩種不同維度的分離,而裝飾模式更多強調在原有基礎上擴充套件,即使很容易感覺到這一點,但是我還是覺得很不放心,畢竟再次之前都沒有接觸過類似的業務。
關於橋模式定義是這樣的:
意圖將抽象部分和它的實現部分分離,使得它們可以獨立地變化。
結構圖如下:
其中有四個 基本角色:
抽象介面類(abstraction)
定義抽象類的介面
保留乙個實現介面類(implementor)物件的指標。
擴充類(refinedabstraction)
擴充abstraction的介面。
實現基類(implementor)
實現類的介面
具體實現類(concreteimplementor)
定義介面
為了弄明白裝飾模式和橋模式的區別,我對上一次學的裝飾模式例子進行了改寫,依照上面的結構,我的思路是把加密和轉碼這樣的裝飾器當成抽象維度,而filestream和networkstream作為實現維度。
所以就有了如下的**:
實現維度的**:
classfilestream:streamimp
~streamimp(){}
virtual
void ihandlestream()=0
;};
class filestreamimp :publicnetwork:streamimp
;void
filestreamimp::ihandlestream()
class networdstreamimp :public然後是抽象維度:streamimp
;void
networdstreamimp::ihandlestream()
class加密:stream
~stream(){}
virtual
void handlestream()=0
;private
: streamimp *_stream;
};void
stream::handlestream()
class crostream:public轉碼:stream
void
handlestream();
};void
crostream::handlestream()
class transtream:public然後我開始測試:stream
void
handlestream();
private:};
void
transtream::handlestream()
//於是就看到了這樣的結果必要的話引入標頭檔案,我沒寫出
intmain()
乍一看還是挺完美的:
然後,我相信其實到這裡,大概也就能夠看出了裝飾模式和橋模式結構上那一點點不同,僅僅是一點點,確實真正的產生了很大的不同,就像它們的名字一樣那麼生動形象。
用橋模式實現的版本完全不支援同時加密轉碼兩種操作,原因是它不像橋模式一樣,兩種維度有個共同的祖先,當然,對於裝飾模式而言,我們看到因為他們有共同的祖先,所以實際上不能做到裝飾和具體實現的完全分離,它更多是在已有介面的基礎上新增新的職責,儘管橋模式也有這樣的功能,但是橋模式在真正的把兩個維度分開了,在復合新增職責上確沒有裝飾模式那麼的靈活。在回頭看看結構圖,我想,也就一目了然。
當然最後還是要說一下,我感覺橋模式具體業務還是比較複雜的,在將業務分開之前,我想得考慮的足夠長遠,至少就我現在的水平,還是難以理解的,大概也就這樣了,我想上面**應該還有問題吧,以後再做補充。
設計模式 橋模式
講解 bridge1.cpp class messager 平台實現 class pcmessagerbase public messager virtual void drawshape virtual void writetext virtual void connect class mobil...
設計模式 橋模式
設計模式 橋模式 1.橋模式的設計理念 橋模式 與 裝飾模式 一樣,是對於設計模式中的 單一職責 來進行修改的,其中 裝飾模式 是對於很多附加功能的修改,而橋模式是針對多維度。橋模式是針對多維度實現裝配組合的,舉個例子,兩個維度,m n,則要至少實現m n個類 而如果使用橋模式,在編譯時去自由組合,...
設計模式學習 工廠模式 橋接模式
windows 對使用者 提供統一的服務,具體 實現依賴於windowsabstractfactory windows 針對使用者 提供統一的服務,具體介面實現依賴於windowsabstractfactory 針對不同視窗,有不同的具體實現macwindowsfacotry 和windowswin...