1. 程式人生 > 其它 >java設計模式-單例模式Singleton

java設計模式-單例模式Singleton

技術標籤:java基礎java設計模式

1. 單例設計模式
      採取一定的方法,保證在整個系統執行中,某個類只有一個物件例項
2. 如何實現
      1. 私有化類的構造器   顯示寫出構造方法,避免new 出系統自帶的預設構造方法
      2. 內部建立類的物件
      3. 提供公有的方法,返回累的物件
3. 餓漢和懶漢的區別
      餓漢式: 缺點:建立類的時候就載入,載入時間過長
              優點:執行緒是安全的
      懶漢式: 延遲物件載入。
package singleton;

// 餓漢單例模式
public class Singletontest {

    //1. 私有化類的構造器
    private Singletontest() {
    }

    //2. 內部建立類的物件
    private static Singletontest Singleton_instance = new Singletontest();

    //3. 提供公有的方法,返回累的物件
    public static Singletontest getSingletoninstance() {
        return Singleton_instance;
    }

}
package singleton;

// 懶漢單例模式  在類載入的時候,麼有建立靜態的物件,而是在呼叫的時候,在建立
public class Singletontestlazy {

    //1. 私有化類的構造器
    private Singletontestlazy() {
    }
    //2. 聲明當前物件麼有初始化
    private static Singletontestlazy Singleton_instance = null;

    //3. 宣告public、static的返回當前類物件的方法
    public static Singletontestlazy getSingletoninstance() {
        // 如果為空,則還未建立物件,為其建立,如果不為空,則認為已經建立過,則直接返回。單例的本質就是隻建立一個全域性靜態物件,建立共有方法呼叫
        if (Singleton_instance == null){
            Singleton_instance = new Singletontestlazy();
        }
        return Singleton_instance;

    }

}
package singleton;

//測試
public class TestDemo {

    public static void main(String[] args) {
        //餓漢單例模式測試
        Singletontest s1 =  Singletontest.getSingletoninstance();
        Singletontest s2 =  Singletontest.getSingletoninstance();
        System.out.println(s1 == s2);

        //飽漢單例模式測試
        Singletontestlazy s1lzay = Singletontestlazy.getSingletoninstance();
        Singletontestlazy s2lzay = Singletontestlazy.getSingletoninstance();
        System.out.println(s1lzay == s2lzay);

        // 結果都為true,說明兩次建立的物件都是同一個物件
    }
}

餓漢式單例 直接靜態生成

package Block;

public class Singleton {
    public static void main(String[] args) {
        Singleton1 s1 = Singleton1.s;

    }
}

class Singleton1{
    private  Singleton1(){}

    public static final Singleton1 s = new Singleton1(); 
}