1. 程式人生 > >設計模式(單例模式)

設計模式(單例模式)

自己的 n) single return 資源管理器 能夠 調用 div 必須

‘‘‘
單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的
是通過單例模式可以保證系統中,應用該模式的類,一個類只有一個實例。即一個
類只有一個對象實例。
單例模式的要點:
    1、某個類只能有一個實例
    2、它必須自行創建這個實例
    3、它必須自行向整個系統提供這個實例
從具體實現角度來說,就是以下三點:
    1、單例模式的類只提供私有的構造函數
    2、類定義中含有一個該類的靜態私有對象
    3、該類提供了一個靜態的共有的函數用於創建或獲取它本身的靜態私有對象
用到的地方:比如資源管理器,或者
    每臺計算機可以有若幹個打印機同時工作,但是卻只能有一個Printer Spooler,
    不然兩臺打印機打印一個文件怎麽辦
單例模式的優點:
    1、實例控制:單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例
    2、靈活性:因為類控制了實例化過程,所以類可以靈活更改實例化過程
單例模式的缺點:
    1、開銷:雖然數量少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。
    2、可能的開發混淆:使用單例對象時,必須記住不能使用 new 關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類
    3、對象生存期:不能解決刪除單個對象的問題。在提供內存管理的語言中,只有單例類能夠導致實例被取消分配,因此它包含對該實例的私有引用。
‘‘‘ class MyClass(): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: # 調用MyClass父類,也就是Object的__new__方法來創建一個新的對象,然後賦值給保護變量_instance實現單例 cls._instance = super(MyClass, cls).__new__(cls, *args, **kwargs) return cls._instance
class HerClass(MyClass): a = 1 one = HerClass() two = HerClass() print(one == two) #True print(one is two) #True print(id(one), id(two)) #42818864 42818864

設計模式(單例模式)