一、簡介
什麼是單例模式?單例模式是指:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。
單例模式實現一(使用類方法實現):
class
singleton
(object):
_instance =
none
@classmethod
definstance
(cls)
:if cls._instance:
return cls._instance
else
: obj = singleton(
) cls._instance = obj
return cls._instance
obj = singleton.instance(
)obj1 = singleton.instance(
)print
(obj, obj1)
# <__main__.singleton object at 0x1055076a0> <__main__.singleton object at 0x1055076a0>
單例模式實現二(使用__new__
方法實現)
class
singleton
(object):
def__new__
(cls,
*args,
**kwargs):if
nothasattr
(cls,
'_instance'
) orig =
super
(singleton, cls)
cls._instance = orig.__new__(cls,
*args,
**kwargs)
return cls._instance
obj = singleton(
)obj1 = singleton(
)print
(obj, obj1)
# <__main__.singleton object at 0x1085096a0> <__main__.singleton object at 0x1085096a0>
二、單例模式的優點和應用
單例模式的優點:
1、由於單例模式要求在全域性內只有乙個例項,因而可以節省比較多的記憶體空間;
2、全域性只有乙個接入點,可以更好地進行資料同步控制,避免多重占用;
3、單例可長駐記憶體,減少系統開銷。
單例模式的應用舉例:
1、生成全域性惟一的序列號;
2、訪問全域性復用的惟一資源,如磁碟、匯流排等;
3、單個物件占用的資源過多,如資料庫等;
4、系統全域性統一管理,如windows下的task manager;
5、**計數器。
三、單例模式的缺點
1、單例模式的擴充套件是比較困難的;
2、賦於了單例以太多的職責,某種程度上違反單一職責原則;
3、單例模式是併發協作軟體模組中需要最先完成的,因而其不利於測試;
4、單例模式在某種情況下會導致「資源瓶頸」。
單例模式(2)
例項化 執行建構函式 填充屬性 初始化 spring依賴注入bean例項預設是單例的 org.springframework.beans.factory.support.abstractbeanfactoryprotected t dogetbean final string name,nullab...
2 單例模式
單執行緒環境 public class singleton1 private static singleton1 instance null public static singleton1 getinstance 先加鎖後判斷,但是加鎖開銷大,效率不高 public class singleton...
設計模式 2 單例模式
單例模式,也是非常好理解的一種設計模式。單例,也叫單件,目的是為了保證乙個類只有乙個例項。當然,沒使用上單例模式的時候,在 實現時候,注意不要隨便new某個物件,這 的確可以,但很不安全。因此簡單 一處理,乙個單例模式便出來了。using system using system.collection...