Java入門之初識設計模式---單列模式
設計模式
是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案
單例模式
目的:使得類的一個物件成為該類系統中的唯一例項
定義:一個類有且僅有一個例項,並且自行例項化向整個系統提供
因此,設計要點是:
某個類只能有一個例項
必須自行建立例項
必須自行向整個系統提供這個例項
實現:
只提供私有的構造方法
含有一個該類的靜態私有物件
提供一個靜態的公有方法用於建立、獲取靜態私有物件
程式碼實現方案:
餓漢式
懶漢式
餓漢式
類載入時,靜態例項物件完成了例項化操作;空間換時間。(物件建立過程中例項化)
餓漢式執行緒安全
新建檔案SingletonOne.java
/**
* 餓漢式
*/
public class SingletonOne {
//1.建立類中的私有建構函式
private SingletonOne(){
}
//2.建立該型別的私有靜態例項
private static SingletonOne instance = new SingletonOne();
//3.建立公有靜態方法返回靜態例項物件
public static SingletonOne getInstance(){
return instance;
}
}
新建檔案Test.java
public class Test {
public static void main(String[] args) {
SingletonOne one = SingletonOne.getInstance();
SingletonOne two = SingletonOne.getInstance();
System.out.println(one);
System.out.println(two);
}
}
輸出結果可以看到是同一個類的地址。
懶漢式
類載入時並未例項化,第一次使用時才進行例項化;時間換空間。(靜態公有方法中例項化)
懶漢式存線上程風險
懶漢式執行緒安全的解決方案:(此處大致介紹下,後邊線上程篇會詳細介紹)
同步鎖
雙重校驗鎖
靜態內部類
列舉
新建檔案:SingletonOne.java
public class SingletonTwo {
//1.建立私有構造方法
private SingletonTwo(){
}
//2.建立靜態的該類例項物件
private static SingletonTwo instance = null;
//3.建立開放的靜態方法提供例項物件
public static SingletonTwo getInstance(){
if(instance == null)
instance = new SingletonTwo();
return instance;
}
}
新建檔案Test.java
public class Test {
public static void main(String[] args) {
SingletonTwo one = SingletonTwo.getInstance();
SingletonTwo two = SingletonTwo.getInstance();
System.out.println(one);
System.out.println(two);
}
}
輸出結果同上餓漢式程式碼
單列模式的特點以及應用場景
優點:
在記憶體中只有一個物件,節省記憶體
避免頻繁的建立和銷燬物件,提高效能
避免對共享資源的多重佔用
缺點:
擴充套件比較困難
如果例項化後的物件長期不利用,系統將預設認為垃圾,進行回收,造成物件狀態丟失
使用場景:
建立物件時佔用資源過多,但同時又需要用到該類物件
對系統內資源要求統一讀寫,如讀寫配置資訊
當多個例項存在可能引起程式邏輯錯誤,如號碼生成器
相關文章
- Java入門之初識設計模式—單列模式Java設計模式
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- 設計模式入門-簡單工廠模式設計模式
- PHP設計模式-- 單列模式PHP設計模式
- 單列設計模式設計模式
- 設計模式之初體驗設計模式
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java設計模式-單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- 設計模式入門設計模式
- 設計模式入門:原型模式設計模式原型
- Java常用設計模式-單例模式Java設計模式單例
- Java設計模式之單例模式Java設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- Java設計模式系列之單例設計模式Java設計模式單例
- 設計模式開門之單例模式設計模式單例
- Java設計模式之(九)——門面模式Java設計模式
- java設計模式其一 單例模式Java設計模式單例
- java設計模式-簡單工廠模式Java設計模式
- java單例設計模式Java單例設計模式
- 淺識JAVA設計模式——觀察者模式Java設計模式
- 淺識JAVA設計模式——工廠模式(一)Java設計模式
- 設計模式:簡單的鴨子模型(入門)設計模式模型
- [java設計模式]破解單例設計模式,禁止偷生、超生!Java設計模式單例
- 折騰Java設計模式之單例模式Java設計模式單例
- java23種設計模式-門面模式(外觀模式)Java設計模式
- JAVA設計模式 1 設計模式介紹、單例模式的理解與使用Java設計模式單例
- Java設計模式——模板設計模式Java設計模式
- 1.設計模式之初體驗—精讀《JavaScript 設計模式》Addy Osmani著設計模式JavaScript
- Java常用設計模式之簡單工廠模式Java設計模式
- 直播軟體搭建,Java設計模式單例模式Java設計模式單例
- java23種設計模式—— 二、單例模式Java設計模式單例
- 設計模式(單例模式)設計模式單例
- [設計模式] 單例模式設計模式單例