設計模式
出自 MBA智库百科(https://wiki.mbalib.com/)
設計模式(Design pattern)
目錄 |
設計模式是指控制項在頁面設計器中呈現時運行的代碼。設計模式使人們可以更加簡單方便地復用成功的設計和體繫結構。將已證實的技術表述成設計模式也會使新系統開發者更加容易理解其設計思路。
設計模式是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的;設計模式使代碼編製真正工程化;設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。可復用面向對象軟體系統一般劃分為兩大類:應用程式工具箱和框架(Framework),我們平時開發的具體軟體都是應用程式,Java的API屬於工具箱;而框架是構成一類特定軟體可復用設計的一組相互協作的類,EJB(EnterpriseJavaBeans)是Java應用於企業計算的框架。框架通常定義了應用體系的整體結構類和對象的關係等等設計參數,以便於具體應用實現者能集中精力於應用本身的特定細節。框架主要記錄軟體應用中共同的設計決策,框架強調設計復用,因此框架設計中必然要使用設計模式。
根本原因是為了代碼復用,增加可維護性。實現代碼復用需要面向對象有幾個原則:開閉原則(Open Closed Principle,OCP)、里氏代換原則(Liskov Substitution Principle,LSP)、依賴倒轉原則(Dependency Inversion Principle,DIP)、介面隔離原則(Interface Segregation Principle,ISP)、合成/聚合復用原則(Composite/Aggregate Reuse Principle,CARP)、最小知識原則(Principle of Least Knowledge,PLK,也叫迪米特法則)。開閉原則具有理想主義的色彩,它是面向對象設計的終極目標。其他幾條,則可以看做是開閉原則的實現方法。設計模式就是實現了這些原則,從而達到了代碼復用、增加可維護性的目的。
- 開閉原則
此原則是由Bertrand Meyer提出的。原文是:“Software entities should be open for extension,but closed for modification”。就是說模塊應對擴展開放,而對修改關閉。模塊應儘量在不修改原(是“原”,指原來的代碼)代碼的情況下進行擴展。
- 里氏代換原則
里氏代換原則是由Barbara Liskov提出的。如果調用的是父類的話,那麼換成子類也完全可以運行。
- 依賴倒轉原則
抽象不應該依賴於細節,細節應當依賴於抽象。要針對介面編程,而不是針對實現編程。傳遞參數,或者在組合聚合關係中,儘量引用層次高的類。主要是在構造對象時可以動態的創建各種具體對象,當然如果一些具體類比較穩定,就不必在弄一個抽象類做它的父類,這樣有畫蛇添足的感覺。
- 介面隔離原則
定製服務的例子,每一個介面應該是一種角色,不多不少,不幹不該乾的事,該乾的事都要乾。
- 合成/聚合復用
合成/聚合復用原則(Composite/Aggregate Reuse Principle,CARP)經常又叫做合成復用原則。合成/聚合復用原則就是在一個新的對象裡面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用已有功能的目的。它的設計原則是:要儘量使用合成/聚合,儘量不要使用繼承。就是說要少用繼承,多用合成關係來實現。面向對象是要把波動限制在儘量小的範圍。在Java中,應儘量針對Interface編程,而非實現類。這樣,更換子類不會影響調用它方法的代碼。要讓各個類儘可能少的跟別人聯繫,擴展性和維護性才能提高。理解了這些原則,再看設計模式,只是在具體問題上怎麼實現這些原則而已。
- 最少知識原則
也叫迪米特法則。不要和陌生人說話,即一個對象應對其他對象有儘可能少的瞭解。