c++設計模式 李建忠在軟體系統中,經常有這樣的一些特殊類,必須保證它們在系統中只存在乙個例項,才能確保它們的邏輯正確性以及良好的效率。
保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。單例模式
class
singleton
// 執行緒非安全版本
singleton* singleton:
:m_instance = nullptr;
singleton* singleton:
:getinstance(
)return m_instance;
}
// 執行緒安全版本,但鎖的代價過高
singleton* singleton:
:getinstance(
)return m_instance;
}
// 雙檢查鎖,但由於記憶體讀寫reorder不安全
singleton* singleton:
:getinstance()}
return m_instance;
}
總結:雙檢查鎖不能用,單執行緒用執行緒非安全版本,可以。執行緒安全版本,但鎖的代價過高版本可以,但高併發情況下不推薦。單例模式一般不要支援拷貝建構函式介面,因為可能導致多個物件例項,與單例模式的初衷違背。
以上內容摘自:c++設計模式 李建忠
python實現單例模式:
class
singleton
(object):
__my_instance =
none
def__init__
(self)
:pass
def__new__
(cls,
*args,
**kwargs)
:if cls.__my_instance is
none
: cls.__my_instance =
object
.__new__(cls,
*args,
**kwargs)
return cls.__my_instance
single1 = singleton(
)single2 = singleton(
)print(id
(single1)
==id
(single2)
)
# 單例模式
# 函式實現
defsingleton
(cls)
: _cls_instance =
definner()
:if cls not
in _cls_instance :
_cls_instance[cls]
= cls(
)return _cls_instance[cls]
return inner
@singleton
class
cls(
object):
def__init__
(self)
:pass
cls1 = cls(
)cls2 = cls(
)print(id
(cls1)
==id
(cls2)
)
設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...
設計模式之單例模式
package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...
設計模式之 單例模式
單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...