設計模式筆記12 單例模式

2021-10-01 06:22:37 字數 1205 閱讀 6188

物件導向很好地解決了「抽象」的問題,但是必不可免地要付出一定的代價,對於通常情況來講,物件導向的成本大都可以忽略不計。但是某些情況,物件導向所帶來的成本必須謹慎處理。

典型模式:

保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。 ——《設計模式》gof

singleton.cpp:

class

singleton

;singleton* singleton::m_instance=

nullptr

;//執行緒非安全版本

singleton* singleton::

getinstance()

return m_instance;

}//執行緒安全版本,但鎖的代價過高,(高併發時需等待)

singleton* singleton::

getinstance()

return m_instance;

//...解鎖

}//雙檢查鎖,但由於記憶體讀寫reorder不安全

//預想的new過程:malloc --> 呼叫建構函式 --> 返回物件指標

//編譯器有可能進行優化,reorder後的new過程:malloc --> 返回物件指標 --> 呼叫建構函式

//m_instance只是乙個記憶體位址,沒有經過構造器,不加volatile不能用

singleton* singleton::

getinstance()

}return m_instance;

}//c++ 11版本之後的跨平台實現 (volatile,只有vsc++可以使用,防止編譯器優化)

//也可以使用懶漢模式,不用這麼多**

所謂餓漢式,就是直接建立出類的例項化;

而對於懶漢式,就是在需要的時候再建立類的例項化

本文為懶漢式單例模式,具體差異請參考: 單例模式(懶漢式和餓漢式區別)

12 設計模式 單例模式 Singleton

動機 motivation 模式定義 舉個例子 其實單例模式重點是對static的應用 static變數是放在全域性區 有不同的叫法 可以理解為全域性變數,訪問許可權通過靜態成員函式訪問。class singleton singleton singleton m instance nullptr 執...

設計模式筆記 單例模式

單例模式在系統開發時很常見,乙個系統中可能會有多個單例模式的運用!它比全域性變數的好處?1.能控制生成時間,保證初始化順序?2.容易保證執行緒安全 全域性變數需要多執行緒client單獨控制併發,單例在類實現中已經做到,無需client再處理 3.減少函式模組之間的耦合,減少命名衝突,便於管理?可能...

設計模式筆記 單例模式

1 懶漢式 1 執行緒不安全 public class singleton public static singleton getinstance return singleton 缺點 不支援多執行緒。2 執行緒安全 public class singleton public static syn...