java設計模式-單例模式Singleton
阿新 • • 發佈:2020-12-28
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();
}