单例模式的创建方式
說明:
以下均為線程安全的實現方式。
懶漢、餓漢的非線程安全的意義不大,未實現。
1. 餓漢模式
類初始化時直接創建對象
public class Singleton {private static Singleton singleton = new Singleton();//餓漢模式,類初始化時直接創建public Singleton getInstance() {return singleton;} }2. 懶漢模式
懶漢模式,按需加載
public class Singleton {private Singleton singleton;public synchronized Singleton getInstance() {//懶漢模式,需要的時候再創建if(singleton == null) {singleton = new Singleton();}return singleton;} }3. 懶漢模式優化版
優化懶漢模式,減少鎖的消耗
public class Singleton {private Singleton singleton;public Singleton getInstance() {if (singleton == null) {synchronized (singleton) {//懶漢模式,需要的時候再創建。double check,防止重復創建if(singleton == null) {singleton = new Singleton();}}}return singleton;} }4. 懶漢模式——無鎖實現
利用靜態內部類來實現
public class Singleton {//Singleton類無法繼承private Singleton(){ // if(SingletonHolder.singleton == null) { // throw new RuntimeException(); // }}private static class SingletonHolder {private static Singleton singleton = new Singleton();}public Singleton getInstance() {return SingletonHolder.singleton;}}5. 枚舉實現
利用枚舉來實現,
public class Singleton {//Singleton類無法繼承private Singleton(){}public static Singleton getInstance() {//返回內部enum的單例引用return SingletonEnum.INSTANCE.singleton;}private static enum SingletonEnum { INSTANCE;private Singleton singleton;private SingletonEnum() {singleton = new Singleton();}}public static void main(String[] args) {Singleton singleton = new Singleton();System.out.println(singleton);} }總結
- 上一篇: 设计模式——创建型模型
- 下一篇: 减肥期间突然体重增加怎么回事