單例模式,只要一個就夠啦!

首先要明確的是!

單例類只有一個實例!自行實例化提供這個唯一的實例!

單例模式三個要點:

  1. 私有構造方法,private!
  2. 一個自己的私有靜態變量!static!
  3. 一個返回自己的靜態公有方法!public static 我自己 method !

單例模式常見兩種分類

餓漢模式

簡單來說就是,不管我什麼時候喫,一開始就給我準備好!

public class Singleton {  
    private static Singleton singleton = new Singleton();  
    private Singleton(){}  
    public static Singleton getInstance(){  
        return singleton;  
    }  
}  

懶漢模式

簡單來說就是,我太懶了,等到等快考試的時候再複習吧!

public class Singleton {  
    private static Singleton singleton;  
    private Singleton(){}  
    public static synchronized Singleton getInstance(){  
        if(singleton==null){  
            singleton = new Singleton();  
        }  
        return singleton;  
    }  
}  

優點:

  • 節約內存空間
  • 避免老是創建銷燬,提高性能
  • 避免對共享資源多重佔用
  • 可以全局訪問

適用場景:

  • 需要多次實例化然後銷燬的對象
  • 創建對象很麻煩的對象,又老是用到的對象
  • 有狀態的工具類對象
  • 頻繁訪問數據庫和文件的對象,和2一樣咯
  • 總之特點就是所有場景只需要一個對象

注意事項:

  • 不能用反射,只能用自己提供的方法,不然會new一個新的對象!
  • 不要做單開單例類對象與類中靜態引用的危險操作(沒懂
  • 多線程使用單例,注意線程安全

一些細節~

  • Jvm不會垃圾收集一直不用的單例!
  • 一個Jvm中,除了使用反射,不會出現新的單例
  • 懶漢式單例線程不安全啊!
  • 單例模式不止這些啊!
  • 這兩種單例是不能被繼承的!
  • Java中餓漢要優於懶漢!

學習資料:卡奴達摩的專欄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章