2 單例模式

2021-09-29 02:27:07 字數 1611 閱讀 5744

一、簡介

什麼是單例模式?單例模式是指:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

單例模式實現一(使用類方法實現):

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...