單例模式:單例模式的意思就是隻有一個實例。單例模式確保某一個類只有一個實例,並且自行實例化並向整個系統提供這個實例。這個類稱爲單例類。 java
單例模式有三種:懶漢式單例,餓漢式單例,登記式單例。 spa
public class Singleton { private static Singleton singleton; private Singleton() {} //此類不能被實例化 public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton(); } return singleton; } }優勢:第一次調用才初始化,避免內存浪費。
缺點:必須加鎖synchronized 才能保證單例,(若是兩個線程同時調用getInstance方法,會chuxia)但加鎖會影響效率。 線程
public class Singleton { private static final Singleton SINGLETON = new Singleton(); private Singleton() {} //此類不能被實例化 public static Singleton getInstance() { return SINGLETON; } }優勢:沒有加鎖,執行效率會提升。
缺點:類加載時就初始化,浪費內存。 code
public class Singleton { private Singleton() {} //構造方法是私有的,從而避免外界利用構造方法直接建立任意多實例。 public static Singleton getInstance() { return Holder.SINGLETON; } private static class Holder { private static final Singleton SINGLETON = new Singleton(); } }
內部類只有在外部類被調用才加載,產生SINGLETON實例;又不用加鎖。此模式有上述兩個模式的優勢,屏蔽了它們的缺點,是最好的單例模式。 內存
----- get
說明:以前一直不太清楚幾個模式之間的區別;也不曉得單例模式的注意點,就知道個概念吧。此次在同事的督促下寫完一個單例,而後聽他講了三個單例以及之間的區別,有種豁然開朗的感受。貌似最後一個模式是我以前一直沒理解的。分享之,但願你們都能弄懂單例~ class