(一)什麼是單例模式
單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。(二)實現單例的方法
(三)模組
python 模組在第一次匯入時,會生成 .pyc 檔案,當第二次匯入時,就會直接載入 .pyc 檔案,而不會再次執行模組**。因此,我們只需把相關的函式和資料定義在乙個模組中,就可以獲得乙個單例物件了。(四)new方法
# -*- coding: utf-8 -*-
__author__ = 'loco_python'
class
person
(object)
: _instance = none
_is_init = false
# 實現單例模式
def__new__
(cls, *args, **kwargs)
: if
notcls._instance:
# 如果沒有建立物件,我們就建立物件
cls._instance = super(person, cls).__new__(cls, *args, **kwargs)
# 無論如何我們只返回乙個物件
return
cls._instance
# 只做一次初始化。
def__init__
(self, name, age)
: if
notself._is_init:
self.name = name
self.age = age
self._is_init = true
def__str__
(self)
: return
self.name
p1 = person('xiaohua'
, 18
)p2 = person('xiaowang'
, 19
)# p1和p2同一位址
print
id(p1), id(p2) # 4308349264 4308349264
# 只初始化了第一次
print
p1, p2 # xiaohua xiaohua
(五)裝飾器__author__ = 'loco_python'
from
functools import
wraps
defsingleton
(cls)
: _instance = {}
@wraps(cls)
def(*args, **kwargs)
: if
cls not
in _instance:
_instance[cls] = cls(*args, **kwargs)
return
_instance[cls]
return
@singleton
class
person
: def
__init__
(self)
: pass
p = person()
p1 = person()
print
id(p), id(p1) # 4501461760 4501461760
python設計模式 單例模式
一 什麼是單例模式 單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。二 實現單例的方法 三 模組 python 模組在第一次匯入時,會生成 pyc 檔案,當第...
Python設計模式 單例模式
單例模式 確保乙個類只有乙個例項,並且提供乙個訪問它的全域性方法 class singleton object instance none isfirstinit false def new cls,name if not cls.instance singleton.instance super ...
python設計模式 單例模式
的設計模式共有25種,設計模式其實是 無關的。其目的是基於oop的思想,不同應用場景應用不同的設計模式,從而達到簡化 利於擴充套件 提示性能等目的。本文簡述python實現的單例模式場景。簡而言之,單例模式的應用場景是所有例項物件封裝的資料都相同的場景。在這樣的場景下應用單例模式可以減少重複建立物件...