一、單例模式
單例模式是一種創(chuàng)建型的設(shè)計(jì)模式,構(gòu)造函數(shù)是私有的,因此只能在類中創(chuàng)建一個(gè)實(shí)例,且對外提供一個(gè)靜態(tài)公有方法獲取這個(gè)實(shí)例。
二、創(chuàng)建方法
1. 懶漢式(線程不安全)
public class Singleton { private static Singleton instance; private Singleton ( ) { } public static Singleton getInstance ( ) { if ( instance== null ) { instance = new Singleton ( ) ; } return instance; }
}
2. 懶漢式(線程安全)
public class Singleton { private static Singleton instance; private Singleton ( ) { } public synchronized static Singleton getInstance ( ) { if ( instance== null ) { instance= new Singleton ( ) ; } return instance; }
3. 雙重檢查鎖(DCL,Double-Checked Locking)(線程安全)
public class Singleton { private volatile static Singleton instance; private Singleton ( ) { } ; public static Singleton getInstance ( ) { if ( instance== null ) { synchronized ( Singleton . class ) { if ( instance== null ) { instance= new Singleton ( ) ; } } } return instance; }
}
4. 餓漢式(線程安全)
public class Singleton { private final static Singleton instance= new Singleton ( ) ; private Singleton ( ) { } public static Singleton getInstance ( ) { return instance; }
5. 靜態(tài)內(nèi)部類(線程安全)
public class Singleton { private Singleton ( ) { } private static class InnerClass { private final static Singleton INSTANCE = new Singleton ( ) ; } public static Singleton getInstance ( ) { return InnerClass . INSTANCE ; }
}
6. 枚舉類(線程安全)
public enum Singleton { INSTANCE ; public void doSomething ( String str) { System . out. println ( str) ; }
}