🕵️ 設計模式是什麼#
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重複使用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使程式碼編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理的運用設計模式可以完美解決很多問題,每種模式在現在中都有相應的原理來與之對應,每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是它能被廣泛應用的原因。簡單說:
模式: 在某些場景下,針對某類問題的某種通用的解決方案。
場景: 專案所在的環境
問題: 約束條件,專案目標等
解決方案: 通用、可複用的設計,解決約束達到目標。
🗂️ 分類#
- 創建型模式
物件實例化的模式,創建型模式用於解耦物件的實例化過程。 - 結構型模式
把類或物件結合在一起形成一個更大的結構。 - 行為型模式
類和物件如何互動,及劃分責任和演算法。
🔒 單例模式#
讓某個類只建立一個物件
- 構造方法私有化 因為建立物件使用構造方法 所以可以通過限制構造方法的使用來限制物件的建立
- 建立一個用於保存物件的靜態變數
- 對外提供一個用於獲取物件的方法 (一定是靜態方法)
餓漢模式#
class HungrySingleton {
private HungrySingleton() {
System.out.println("HungrySingleton構造方法執行");
}
static HungrySingleton instance = new HungrySingleton();
static HungrySingleton getInstance() {
return instance;
}
}
特點: 當類被加載時,靜態變數instance
就會被初始化,此時類的私有構造方法會被調用,單例類的唯一實例將被建立
懶漢模式#
class LazySingleton {
private LazySingleton() {
System.out.println("LazySingleton構造方法執行");
}
private static LazySingleton instance = null;
static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
特點: 它在第一次被引用的時候才會實例化,即在類加載的時候不會將自己實例化。它在第一次調用getInstance()
方法的時候實例化,這種技術又稱為延遲加載技術,即在需要的時候才加載實例。