<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
單例模式:「保證一個類僅有一個範例,並提供一個存取它的在這裡插入程式碼片全域性存取點。 單例模式會阻止其他物件範例化其自己的單例物件的副本,從而確保所有物件都存取唯一範例。 單例模式應用的場景一般發現在以下條件下: (1)資源共用的情況下,避免由於資源操作時導致的效能或損耗等。如上述中的紀錄檔檔案,應用設定。 (2)控制資源的情況下,方便資源之間的互相通訊。如執行緒池等。
- Web應用的設定物件的讀取 - Windows的Task Manager(工作管理員) - 網站的計數器,一般也是採用單例模式實現,否則難以同步 - 應用程式的紀錄檔應用,一般都何用單例模式實現,這一般是由於共用的紀錄檔檔案一直處於開啟狀態,因為只能有一個範例去操作,否則內容不好追加 - 資料庫連線池的設計一般也是採用單例模式,因為資料庫連線是一種資料庫資源 - 多執行緒的執行緒池的設計一般也是採用單例模式,這是由於執行緒池要方便對池中的執行緒進行控制。 -
函數裝飾器實現單例
def singleton(class_): instances = {) def get_instance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*argx, **kwargs) return instances[class_] reyurn get_instance @singleton class Cls(object): def __init__(self): pass cls1 = Cls() cls2 = Cls() print(id(cls1) == id(cls2))
輸出結果:
True
instances = {)
使用不可變的類地址作為鍵,其範例作為值,每次創造範例時,首先檢視該類是否存在範例,存在的話直接返回該範例即可,否則新建一個範例並存放在字典中。
使用模組 (常用)實現單例
作為python的模組是天然的單例模式
# mysingleton.py class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton() # to use from mysingleton import my_singleton my_singleton.foo()
基於__new__實現的單例模式(最常用)
類(class)通過方法 new 創造了範例(instance)
class Single(object): _instance = None def __new__(cls, *args, **kw): if cls._instance is None: orig = super(Single, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instance def __init__(self): pass single1 = Single() single2 = Single() print(id(single1) == id(single2))
如果 _instance 為 None,則新建範例,否則直接返回 _instance 存放的範例。
使用 metaclass 實現單例模式
元類(metaclass) 可以通過方法 metaclass 創造了類(class)
class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) return cls._instances[cls] class Cls4(metaclass=Singleton): pass cls1 = Cls4() cls2 = Cls4() print(id(cls1) == id(cls2))
我們將 metaclass 指向 Singleton 類,讓 Singleton 中的 type 來創造新的 Cls4 範例
web應用組態檔單例實現
def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class Config(dict): """ 組態檔類 單例模式 """ def __init__(self): self.__can_import = True self.__init_default() dict.__init__(self) def __init_default(self): self['debug'] = False self['autoreload'] = True @property def can_import(self): return self.__can_import def import_dict(self, **kwargs): if self.__can_import: for k, v in kwargs.items(): self[k] = v self.__can_import = False else: raise Exception('ConfigImportError') def clear(self): self.__can_import = True dict.clear(self) self.__init_default()
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45