對設計模式學習的一點想法兼談Facade模式

字號:

對于設計模式,有太多過來人的忠告!“不能拿著捶子,到處都是釘子”,“不能為模式而模式”,“更加的不能錯用模式”,“模式是處理變化的”等等。這些忠告會讓初學者不知所措,就好比太多的選擇是種負擔!我想我還是簡單的理解:設計模式是一種思想,不是技術(shù),它指導的是設計。我想只要我們從設計的問題去運用它就夠了!不管這種理解正不正確,當你涉入進去會讓你從更寬泛的角度去再次的思考。
     《設計模式》言簡意賅,是本很好的參考書,值得反復咀嚼與推敲!我沒讀過《設計模式精解》,聽說是本很好的設計模式入門教材,同類的很多,但在GOF書的面前都成了“偽經(jīng)”。我沒有貶低的意思,它們的價值也是很大的,輔以實例有助于理解和運用。
     這次翻開《設計模式》,第一個讓我感興趣的是Facade模式!因為在設計多層應用系統(tǒng)時,各層之間的合作關系是比較復雜的,F(xiàn)acade模式就是幫助減弱各層之間耦合度的解決方案。因為它能為子系統(tǒng)中的一組接口提供一致的界面(更高層的接口),這個接口使得子系統(tǒng)更加容易使用。這個模式理解起來非常的簡單,現(xiàn)實生活也有太多的例子,像各企事業(yè)單位都有信仿辦公室,它給外部提供一個簡單高效的窗口!你可能會想:我們可以越過它嗎?現(xiàn)實生活中可以走后門兒,那Facade模式是不是也是這樣呢?沒錯,F(xiàn)acade對外沒有隱藏子系統(tǒng)提供的接口,外部對象可以越過它而直調(diào)用子系統(tǒng)提供的接口。那你可能會問:這還有什么意義呢?因為Facade模式提供易用性的同時沒有限制通用性,當然這種情況你得權(quán)衡!應該提供盡量多的高層接口供客戶使用。這樣可以保證對外隱藏的子系統(tǒng)實現(xiàn)的變化更加容易!Delphi的VCL也有例子,在RemoteDataModule中我們就可以定義一些接口,供客戶系統(tǒng)調(diào)用!它是個結(jié)構(gòu)型模式,在框架中處理各層之間的關系時應該是個常用的模式。
     我不想為這個模式寫個實例了,因為它的主要應用是在分層系統(tǒng)中,小例子有為模式而模式之嫌!我正準備為Delphi三層系統(tǒng)的開發(fā)設計一個參照框架(為什么是參照呢?因為我還做不到通用),里面將有Facade模式的身影!
     除了在設計開始時有考慮解決方案,可更多的時候我們不能應對所有未來出現(xiàn)的情況,更何況對于沒有經(jīng)驗的設計人員。找到設計模式為我們提供的解決方案后,下一步是代碼實現(xiàn)的問題!將現(xiàn)有代碼根據(jù)模式改造成好的設計需要方法,這就是重構(gòu)!它是一門技術(shù),現(xiàn)在的IDE大多有提供,設計模式為重構(gòu)提供了目標(引自GOF)。我們也應該學習它!