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实现) 美元