Java基礎入門---設計模式

目錄

單例模式

代碼實現方案:

餓漢式PK懶漢式


  • 項目中合理的運用設計模式可以完美的解決很多問題
  • 每種模式在現在中都有相應的原理來與之對應
  • 每—一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案
  • 面向對象的設計模式很多,但大家認爲這23個模式是其它模式的基礎

單例模式

  • 滾滾歷史,朝代更迭,永恆定律
    • 一個朝代皇帝只有一個
    • 軍隊的最高司令官只有一個
    • 山不容二虎
  • 計算機系統
    • 驅動程序
    • 打印機後臺處理程序
    • 線程池
    • 緩存
    • 日誌

要點:

  1. 某個類只能有一個實例
  2. 必須自行創建實例
  3. 必須自行向整個系統提供這個實例

實現:

  1. 只提供私有的構造方法
  2. 包含一個該類的靜態私有對象
  3. 提供一個靜態的公有方法用於創建、獲取靜態私有對象

 

代碼實現方案:

  • 餓漢式
package com.imooc.singleton;

//餓漢式:創建對象實例的時候直接初始化 空間換時間
public class SingletonOne {
	// 1.創建類中的私有構造
	private SingletonOne() {

	}

	// 2.創建該類型的私有靜態實例
	private static SingletonOne instance = new SingletonOne();

	// 3.創建公有靜態方法返回靜態實例對象
	public static SingletonOne getInstance() {
		return instance;
	}
}
  • 懶漢式
package com.imooc.singleton;

//懶漢式 : 類內實例對象創建時並不直接初始化,直到第一次調用get方法時,才完成初始化操作
//時間換空間
public class SingletonTwo {
	// 1.創建類中的私有構造
	private SingletonTwo() {

	}

	// 2.創建靜態的該類實例對象
	private static SingletonTwo instance = null;

	// 3.創建開放的靜態方法提供實例對象
	public static SingletonTwo getInstance() {
		if (instance == null)
			instance = new SingletonTwo();

		return instance;
	}
}

餓漢式PK懶漢式

1、餓漢式在類加載時就創建實例,第一次加載速度快
懶漢式第一次使用時才進行實例化,第一次加載速度慢

  • 餓漢式:空間換時間
  • 懶漢式:時間換空間

2、餓漢式線程安全;懶漢式存在線程風險
解決方案

  1. 同步鎖
  2. 靜態內部類
  3. 雙重校驗鎖
  4. 枚舉

優點:

  1. 在內存中只有一個對象、節省內存空間
  2. 避免頻繁的創建和銷燬對象,提高性能
  3. 避免對共享資源的多重佔用

缺點:

  1. 擴展比較困難
  2. 如果實例化後的對象長期不利用,系統將默認爲垃圾進行回收,造成對象狀態丟失

適用場景:

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

 


 

 

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