設計模式二 單例設計模式

2021-08-20 19:45:25 字數 1223 閱讀 2107

核心作用:

(保證每個類只有乙個例項 提供乙個訪問該例項的全域性訪問節點)

常見應用場景

windows 的task manager(任務管理器) 

日誌管理

資料庫設計

總結下:

如果我們初始化需要資源消耗比較大(資料庫物件建立、配置檔案讀取)

單例設計模式的實現

常見:

餓漢式:

public class mode1 

/*** 餓漢式

** @return

*/private mode1 getinstance1()

}

在初始化的時候進行載入 執行緒安全(不需要同步鎖) 呼叫效率比較高 (但是不需要該單例的時候 資源比較浪費)

懶漢式:

/**

* 懶漢式

** @return

*/public static mode1 getinstance2() }}

return instance2;

}

需要的時候建立 但是執行緒不安全 容易併發 需要加同步鎖 (如果不加 可能會建立多個物件)

靜態內部類式

public class mode1 

public static mode1 getinstance3()

}

靜態內部類的初始化 並不會再外部類初始化時進行  而是在呼叫的時候進行 那麼就實現了延遲初始化  初始化的時候建立 那麼也實現了執行緒安全 

列舉式:

列舉類天然單例 (jvm底層實現)

enum modeenum
實現簡單 不能延時載入 執行緒安全

對於上面四種 單例模式 都可以通過反射和反序列化來破解

解決方式:

反射:

private model1

}

反序列化 

private object readresolve()
只要加入該方法即可

設計模式 二 單例模式

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...

設計模式(二) 單例模式

單例模式 用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。經典單例模式 public class singleinstance public static singleinstance geti...

設計模式(二)單例模式

單例模式 保證只有乙個物件,每次獲取物件獲取到的都是同乙個物件。單例模式是我們程式中最常見的設計模式,很多任務具類都設計成單例模式,spring中的bean也有單例,單他不是真正的單例。單例模式總結下來有幾種寫法,他們共性就是私有的構造方法。package com.designpattern.sin...