設計模式 (即,使代碼編寫真正工程化)
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
使用設計模式的目的:爲了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。
設計模式使代碼編寫真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。
最早將模式的思想引入軟件工程方法學的是1991-1992年以“四人組(Gang of Four,簡稱GoF,分別是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides)”自稱的4位著名軟件工程學者,他們在1994年歸納發表了23種在軟件開發中使用頻率較高的設計模式。
劉偉——設計模式的藝術(軟件開發人員內功修煉之道)書中提到:軟件模式是指在軟件開發過程中某些可重現問題的有效解決方法,其基礎結果主要由4部分構成,包括:問題描述(待解決的問題是什麼)、前提條件(在何種環境或約束條件下使用)、解法(如何解決)和效果(由哪些優缺點)。
軟件模式基本結構:
GoF設計模式共23種,分爲三種類型:
1、創建型模式(5種):單例模式、工廠方法模式、抽象工廠模式、原型模式、建造者模式。
PS:簡單工廠模式並不屬於GoF23種設計模式,但是一般在介紹設計模式時,都會對其進行說明。
2、結構型模式(7種):適配器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、代理模式。
3、行爲型模式(11種):策略模式、模版方法模式、命令模式、迭代器模式、觀察者模式、職責鏈模式(責任鏈模式)、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式(Interpreter模式)。
7種常用的面向對象設計原則,是用於評價一個設計模式的使用效果的重要指標之一:
1、單一職責原則(Single Responsibility Principle, SRP):一個類只負責一個功能領域中的相應職責。或者可以定義爲:就一個類而言,應該只有一個引起它變化的原因。
2、開閉原則(Open-Closed Principle, OCP):一個軟件實體應當對擴展開放,對修改關閉。即軟件實體應儘量在不修改原有代碼的情況下進行擴展。
3、里氏代換原則(Liskov Substitution Principle, LSP):所有引用基類(父類)的地方必須能透明地使用其子類的對象。
4、依賴倒轉原則(Dependence Inversion Principle, DIP):抽象不應該依賴於細節,細節應該依賴於抽象。換言之,要針對接口編程,而不是針對實現編程。
5、接口隔離原則(Interface Segregation Principle, ISP):使用多個專門的接口,而不是使用單一的總接口,即客戶端不應該依賴哪些它不需要的接口。
6、合成複用原則(Composite Resuse Principle, CRP):儘量使用對象組合,而不是繼承來達到複用的目的。
7、迪米特法則(Law of Demeter, LoD):一個軟件實體應當儘可能少地與其他實體發生相互作用。