單例設計模式(餓漢式,懶漢式)

week6(Sunday)

單例設計模式

1、什麼是設計模式?
   設計模式:是一套反覆使用、多數人知曉的經過分類、編目的代碼分佈經驗的總結
                 設計模式是軟件開發人員在軟件開發過程中一般問題的解決方案。
                 Java常見設計模式有23種,可分爲三類:
                 一、創建性      二、結構型       三、行爲型
   
2、單例設計模式--(懶漢式、餓漢式)
       目的:使得類的一個對象成爲該類系統中的唯一一個實例,自行實例化並向整個系統提供這個實例
       實現步驟: 1、只提供私有的構造方法(防止外部創建對象)
      2、只提供一個靜態的私有對象

      3、提供一個公有的方法用來創建獲取靜態的私有對象

-------2.1 餓漢式
   創建對象實例時直接初始化,用空間換時間(能保證線程安全)
//餓漢式
			public class Singleton {
				//1、只提供私有的構造方法
				private Singleton(){
				}
				//2、只提供靜態的私有對象並完成初始化
				private static Singleton singleton = new Singleton();
				//3、提供一個公有的方法用來創建獲取靜態的私有變量
				public static Singleton getSingleton(){
					return singleton;//返回該唯一對象
				}
			}
-------2.2 懶漢式
   等到需要使用對象時再創建對象,用時間換空間(線程不安全)
//懶漢式
			public class Singleton2 {
				//1、只提供私有的構造方法
				private  Singleton2(){
				}
				//2、只提供一個靜態的私有對象,不初始化對象
				private static Singleton2 singleton2;
				//3、提供一個公有的方法用來創建獲取靜態的私有對象
				public static Singleton2 getSingleton2(){
					if(singleton2 == null){
						singleton2 = new Singleton2();//創建對象
					}
					return singleton2;
				}
			}	

-------2.3 單例模式設計調用方法   
//單例設計模式類使用方法
public class SingletonTest {
    public static void main(String[] args) {
        //餓漢式
        Singleton singletonOne = Singleton.getSingleton();
        Singleton singletonTwo = Singleton.getSingleton();

        //懶漢式
        Singleton2 singleton2One = Singleton2.getSingleton2();
        Singleton2 singleton2Two = Singleton2.getSingleton2();
    }
}

3、單例設計模式(餓漢式與懶漢式)總結
         優點: 1、在內存中只有一個對象,節省空間
  2、避免頻繁創建銷燬對象,提高性能
  3、避免對共享資源的多重佔用


 缺點: 1、擴展比較困難

  2、若實例化長期不利用,系統會自動進行垃圾回收,造成對象狀態丟失

使用場景:  1、創建對象時佔用資源過多,但同時又要用到該類對象
2、對系統內資源要統一讀寫,如讀寫配置信息
3、當多個實例存在可能引起程序邏輯錯誤,如號碼生成器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章