一、什麼是單例模式
單例:確保一個類別僅有一個實例,並提供一個存取它的全域存取點。
單例模式是一種常用的軟體設計模式之一,其目的是確保整個應用中只存在類別的唯一個實例。
例如我們在系統啟動時,需要加載一些公共的配置信息,對整個應用程序的整個生命週期中都可見且唯一,這時需要設計成單例模式。如:spring容器,session工廠,緩存,資料庫連接池等等。
二、如何保證實例的唯一
1)防止外部初始化
5)線程安全 三、幾種單利模式的比較 (1)餓漢式“因為餓,所以要立即吃飯,刻緩的靜態變量進行實例化。
public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } }
public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }
1)同步鎖定
public synchronized static Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; }
public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; }
public class Singleton { private Singleton() { } private static class SingletonHolder { private static final Singleton singleton = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.singleton; } }
public enum Singleton { INSTANCE; public void init() { System.out.println("资源初始化。。。"); } }