從c++的觀點來說,有幾種**比較醜陋:
c中有指標,c++有模板和繼承。如果不用指標,就要用陣列或者index。如果不懂繼承,copy + paste也能過。其實也不要要求太多,沒什麼大不了的。真正醜陋的地方大家都沒辦法,只好從小的地方做起了呢。要是任何時候都和knuth的lp,tex比起來,我們都不要活了。
轉回來,說visitor。andrew fitzgibbon說visitor模式就足可以夠設計模式的價錢了。visitor是為了代替下面這種**的:void f( objectclass&o )
俺本質上是個猥瑣的人,所以在以前,如果不允許我玩dynamic_cas,我會設定objectclass的時候弄乙個structure, 然後define或者const乙個各個class的typenumber。這樣我就可以if typenumber = = object1 ..... else ....
gamma他們會憤怒的。
具體步驟:
1 定義乙個原來類的visitor類 objectvisitorclass
class objectvisitorclass;
2 在object裡面增加乙個虛函式
virtual void objectclass(1,2)::acceptvisitor( objectvisitorclass& v )
這樣,即使你沒有權利動object類,那麼你也可以通過改動objectvisitorclass來改動acceptvisitor函式的功能。
如果僅僅這樣,我覺得也沒andrew 說的那麼誇張。 設計乙個類要花不小的心力,這種技術是比較華麗,不過有什麼用呢?
---to be continued
訪問者(vistor)模式
訪問者 vistor 模式的定義是,作用於某個物件群中各個物件的操作.它可以使你在不改變這些物件本身的情況下,定義作用於這些物件的新操作。假設有男人和女人兩種元素,要分別列印出他們在不同狀態時的不同表現。用oo的思想把表現 行為 提取出來作為乙個抽象方法,如下 public inte ce pers...
設計模式 設計模式
物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...