什麼是設計模式?編程
設計模式(Design Patterns)表明了最佳的實踐,一般被有經驗的面向對象的軟件開發人員所採用。設計模式是軟件開發人員在軟件開發過程當中面臨的通常問題的解決方案。設計模式
設計模式分類:(3大類,23種)安全
建立型模式:單例模式、抽象工廠模式、原型模式、建造者模式、工廠模式。線程
結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。設計
行爲型模式:模板方法模式、命令模式、訪問者模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式、狀態模式、策略模式、責任鏈模式。代理
一,單例模式:
採起方法,使整個軟件系統中,對某個類只存在一個對象實例。而且該類只提供一個取得其對象實例的方法(靜態方法)。code
實現的類型:對象
1)餓漢模式:接口
餓漢模式就是當類加載時就建立該類的實例,這是建立單例類最容易的方法可是有個一弊端是建立了該實例可是客戶端程序可能不使用這個實例。開發
2)靜態初始化:
靜塊初始化實現相似於餓漢模式初始化,但類的實例在靜態代碼塊中建立並對異常進行處理。
3)懶加載:
懶加載就是當須要的時候再來建立該類的實例,而不是一開始就把實例建立好了。
4)線程安全的單例:
public class ThreadSafeSingleton { private static ThreadSafeSingleton instance = null; private ThreadSafeSingleton(){ } //同步關鍵字synchronized public static synchronized ThreadSafeSingleton getInstance(){ if(instance == null){ instance = new ThreadSafeSingleton(); } return instance; } }
5)枚舉單例
這種方法簡單,便捷。
public enum EnumSingleton { INSTANCE; public static void doSomething(){ //do something } }
特色:
1)單例類只能有一個實例。
2)單例類必須本身建立本身的惟一實例。
3)單例類必須給全部其餘對象提供這一實例。
二,工廠模式:
工廠模式包括:
1)簡單工廠模式
又稱爲靜態工廠方法模式,它屬於類建立型模式。在簡單工廠模式中,能夠根據參數的不一樣返回不一樣類的實例。簡單工廠模式專門定義一個類來負責建立其餘類的實例,被建立的實例一般都具備共同的父類。
- 將建立實例的工做與使用實例的工做分開,使用者沒必要關心類對象如何建立,實現瞭解耦;
- 把初始化實例時的工做放到工廠裏進行,使代碼更容易維護。 更符合面向對象的原則 & 面向接口編程,而不是面向實現編程。
2)工廠方法模式
工廠方法是針對每一種產品提供一個工廠類,經過不一樣的工廠實例來建立不一樣的產品實例。主要解決了簡單工廠模式違背了「開放 - 關閉原則」的問題。
優勢:
- 更符合開-閉原則,新增一種產品時,只須要增長相應的具體產品類和相應的工廠子類便可
- 符合單一職責原則,每一個具體工廠類只負責建立對應的產品
3)抽象工廠模式
抽象工廠模式容許使用抽象的接口來建立一組相關產品,而不須要知道或關心實際生產出的具體產品是什麼,這樣就能夠從具體產品中被解耦。
優勢:
-
下降耦合。抽象工廠模式將具體產品的建立延遲到具體工廠的子類中,這樣將對象的建立封裝起來,能夠減小客戶端與具體產品類之間的依賴,從而使系統耦合度低,這樣更有利於後期的維護和擴展;
-
更符合開-閉原則。新增一種產品類時,只須要增長相應的具體產品類和相應的工廠子類便可。
設計模式六大原則:
-
單一職責原則:
單一職責原則表示一個模塊的組成元素之間的功能相關性。通俗地說,一個類只負責一項職責。
目的:
1)下降類的複雜度
2)提升系統的可維護性
3)修改時下降風險溢出
-
里氏替換原則:
全部引用基類的地方必須能透明地使用其子類對象,子類在擴展父類功能時不能破壞父類原有的功能。
-
接口隔離原則:
一個類對另外一個類的依賴應該創建在最小的接口上。
-
依賴倒置原則:
依賴:成員變量、方法參數、返回值要依賴於抽象,不要依賴於具體。高層模塊不該該依賴低層模塊,兩者都應該依賴於其抽象。
-
迪米特原則:
一個對象應該與其餘對象保持最少的瞭解。
-
開閉原則:
對擴展開放,對修改關閉,經過擴展已有軟件系統,能夠提供新的功能,修改的關閉,保證穩定性和延續性。