今天與人再次聊到這個話題,有人在爲"到底該用什麼模式"而煩惱,我相信,每一個都經歷過這個階段必定都會感受很熟悉這個煩惱
我認爲, 模式不是目的,只是工具,達到設計目標的工具,咱們不會由於"爲了使用錘子"而去"使用錘子",必定是由於其餘目的"好比敲打釘子"而去"使用錘子".
咱們應該也一樣不要由於"想用那個模式"而去"使用模式",而必定是由於其餘的目的而去"使用模式",好比爲了達到"單一職責"使用"工廠類模式"以達到"將構造職責和對象自己的職責"分離,爲了達到"對修改關閉"而使用"訪問者模式"將"對象的行爲"與"對象的表示"分離等等.
有人說在現代的語言裏(如.Net,Java),有的模式已經沒有用了,如觀察者,簡單工廠等,其實這僅僅只是由於這些語言裏對這些模式有了更好的支持,可是熟悉這些模式自己仍是頗有意義的,正如候先生所說:「勿在浮沙築高臺」。
有人說「我我的認爲,解決重複的問題不用設計模式,用面向對象的知識就能解決,用設計模式,我主要是解決變化的問題」,我認爲:設計模式
OOD和模式是沒法比較的,抽象層次不同
OOD的抽象層次高: 好比 水果
模式的抽象層次低: 好比 香蕉
你不能說: 水果和香蕉那個好吃一些 工具
有人說「感受有些模式就是由於之前語言和編譯器能力底下才產生的一些設計方案」,我認爲正好相反,由於有的模式是如此精妙 ,因此現代不少語言將模式的不少機制集成進來。
也有人說「ioc一出來。不少模式就沒得用了」,我認爲 IOC和模式不是一個抽象層次上的,IOC是屬於OOD原則裏的,至關於倒置倚賴,模式是OOD的工具,語言是模式的工具,就想你不能說:有了水果,香蕉就沒用了。
模式是工具,不是目的
目的是那些基本原則:
好比高聚合,低耦合,OOD原則等
終極目的其實只有一個:不要重複(Not repeat),這是最終目的 spa