1. 程式人生 > >設計模式簡單入門---單例模式

設計模式簡單入門---單例模式

new tint highlight ava jdb on() ble 簡單 變慢

1 定義

  Ensure a class only has one instance,and provide a global point of access to it. (保證一個類僅有一個實例,並提供一個訪問它的全局訪問點)

2 用處

   當前系統的某一個對象只需要一個實例的時候使用,比如:JDBC的連接在很多時候只需要一個實例。

3 優點

  有利於控制實例的個數,從而節省了內存,有利於java的垃圾回收。

4 實現

  懶漢模式(不能在多線程中使用)

public class SimpleSingleton {
    private static SimpleSingleton instance;
    private SimpleSingleton(){}
    public static SimpleSingleton getIntance(){
        if(instance == null)
            instance = new SimpleSingleton();
        return instance;
    }
}

  懶漢模式(可以在多線程下使用,但效率低)

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

  餓漢模式(會在初始化的時候進行實例化,初始化速度變慢)

public class SingletonHungry {
    private static SingletonHungry instance = new SingletonHungry();
    private SingletonHungry(){}
    public static SingletonHungry getInstance(){
        return instance;
    }
}

  枚舉(不僅能避免多線程同步問題,而且還能防止反序列化重新創建新的對象,沒有實際使用過,簡單粗暴~)

public
enum SingletonEnum { instance; }

  雙重校驗鎖

public class SingletonDouble {
    private volatile static SingletonDouble singletonDouble;
    private SingletonDouble(){}
    public static SingletonDoublegetSingletonDemo7(){
        if (singletonDouble== null) {
            synchronized (SingletonDouble .class) {
                if (singletonDouble== null) {
                    singletonDouble= new SingletonDouble ();
                }
            }
        }
        return SingletonDouble ;
    }
}

設計模式簡單入門---單例模式