經典設計模式 單例模式

2021-09-27 02:02:48 字數 1083 閱讀 1445

特點:

單例類只能有乙個例項

單例類必須自己建立自己的唯一例項

單例類必須給所有其他物件提供這一物件例項

單例模式的應用場景:

1. windows的task manager(任務管理器)就是很典型的單例模式

2. **的計數器,一般也是採用單例模式實現,否則難以同步。

3. 應用程式的日誌應用,一般都何用單例模式實現,這一般是由於共享的日誌檔案一直處於開啟狀態,因為只能有乙個例項去操作,否則內容不好追加。

4. 資料庫連線池的設計一般也是採用單例模式,因為資料庫連線是一種資料庫資源。資料庫軟體系統中使用資料庫連線池,主要是節省開啟或者關閉資料庫連線所引起的效率損耗,這種效率上的損耗還是非常昂貴的,因為何用單例模式來維護,就可以大大降低這種損耗。

5. 多執行緒的執行緒池的設計一般也是採用單例模式,這是由於執行緒池要方便對池中的執行緒進行控制。

餓漢式:(會延遲載入)餓漢式沒有執行緒安全問題

在類的初始化的時候建立物件,該物件一直在方法區中存在直到程式執行結束,占用記憶體資源,但是他的第一次呼叫的速度肯定比懶漢式的要快。

class test1

public static test1 gettest1()

}

懶漢式:同時解決懶漢模式執行緒安全問題(沒有鎖的情況下,當多個執行緒同時訪問gettest2()時會出現多個物件的情況,與單例模式不符,所以執行緒不安全,這樣就必須要加鎖)

在第一次獲取物件的時候進行建立,會出現執行緒安全問題,加個鎖就好,加鎖後第一次的訪問,會有一定的延遲。

class test2

public static test2 gettest2()

} return test2;

}}

解決:新增volatile,這個關鍵字禁止指令的重排。

class test2

public static test2 gettest2()

} return test2;

}}

PHP經典設計模式 單例模式 pfinal

class mysql 建立乙個用來例項化物件的方法,如果不存在乙個這個類的例項屬性,就建立乙個,否則就取這個例項屬性。public static function getinstance return self conn 防止物件被複製 public function clone 防止反序列化後建...

單例模式(經典)

一 定義 眾多設計模式中,單例模式是一種比較常見模式。本文以乙個c 開發者的角度分析單例模式的幾種經典實現。gof定義單例模式需滿足以下兩個條件 1 保證乙個類只建立乙個例項。2 提供對例項的全域性訪問點。二 應用場景 日誌類 配置類 管理類 共享資源類 三 單例的幾種實現 3.1 lazy sin...

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...