python設計模式

2022-08-23 01:54:15 字數 3492 閱讀 3808

定義了乙個用於建立物件的介面,讓子類決定例項化哪乙個類,使乙個類的例項化延遲到其子類。

#

滑鼠基類

class

mouse:

pass

#戴爾滑鼠類

class

dellmouse(mouse):

pass

#惠普滑鼠類

class

hpmouse(mouse):

pass

#滑鼠工廠類

class

mousefactory:

defgetmouse(self, name):

if name == '

dell':

return

dellmouse()

elif name == 'hp'

:

return

hpmouse()

#例項化滑鼠工廠

factory =mousefactory()

#生產戴爾滑鼠

mouse = factory.getmouse('

dell

')

是一種為訪問類提供乙個建立一組相關或相互依賴物件的介面,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構

#

滑鼠基類

class

mouse:

pass

#戴爾滑鼠類

class

dellmouse(mouse):

pass

#惠普滑鼠類

class

hpmouse(mouse):

pass

#鍵盤基類

class

keyboard:

pass

#戴爾鍵盤類

class

dellkeyboard(keyboard):

pass

#惠普鍵盤類

class

hpkeyboard(keyboard):

pass

#dell工廠類

class

dellfactory:

defcreatemouse(self):

return

hpmouse()

defcreatekeyborad(self):

return

hpkeyboard()

#hp工廠商類

class

hpfactory:

defcreatemouse(self):

return

hpmouse()

defcreatekeyborad(self):

return

hpkeyboard()

#pc廠商類

class

pcfactory:

defgetfactory(self, name):

if name == '

dell':

return

dellfactory()

elif name == 'hp'

:

return

hpfactory()

pcfactory =pcfactory()

factory = pcfactory.getfactory('

dell')

factory.createmouse()

模組在第一次匯入時,會生成.pyc檔案,當第二次匯入時,就會直接載入.pyc檔案,而不會再次執行模組**

class

globalcls(dict):

pass

g = globalcls()

def

singleton(cls):

_instance ={}

def _singleton(*args, **kwargs):

if cls not

in_instance:

_instance[cls] = cls(*args, *kwargs)

return

_instance[cls]

return

_singleton

@singleton

class

globalcls(dict):

pass

in [2]: globalcls()['name

'] = 'ply'in [3

]: globalcls()

out[3]:

class

globalcls(dict):

def__new__(cls, *args, **kwargs):

ifnot hasattr(cls, '

_instance'):

cls._instance = super().__new__(cls, *args, **kwargs)

return cls._instance

in [10]: globalcls()['name

'] = 'ply'in [11

]: globalcls()

out[11]: {}

單例項沒生效,應該是繼承導致的

class

globalcls():

def__new__(cls, *args, **kwargs):

ifnot hasattr(cls, '

_instance'):

cls._instance = super().__new__(cls, *args, **kwargs)

return cls._instance

in [35]: id(globalcls())

out[35]: 1901732620048in [36]: id(globalcls())

out[36]: 1901732620048

小結:重寫__new__方法實現單例不適合有繼承的情況

class

singletontype(type):

def__call__(cls, *args, **kwargs):

ifnot hasattr(cls, "

_instance"):

cls._instance = super().__call__(*args, **kwargs)

return

cls._instance

class globalcls(dict, metaclass=singletontype):

pass

in [56]: globalcls()['name

'] = 'ply'in [57

]: globalcls()

out[57]:

Python設計模式 狀態設計模式

狀態設計模式的簡單示例 優缺點乙個物件可以基於其內部狀態封裝多個行為。狀態模式可以看作在執行時改變物件行為的一種方式。以收音機為例進行說明。收音機具有am fm 切換開關 兩種調頻方式和乙個掃瞄按鈕。因此根據收音機的基本狀態 am fm 當調諧到am或fm頻道時,掃瞄按鈕的行為就會動態的改變。con...

python設計模式 原形設計模式

一 什麼是原形設計模式 原型設計模式 prototype design pattern 幫助我們建立物件的轉殖,其最簡單的形式就是一 個clone 函式,接受乙個物件作為輸入引數,返回輸入物件的乙個副本。在python中,這可以 使用copy.deepcopy 函式來完成。二 應用案例 三 實現使用...

Python 設計模式

例項 類 類工廠 簡單來說就是把一些具有相同方法的類再進行封裝,抽象共同的方法以供呼叫.是工廠方法的高階版本.例項 類 類工廠 抽象工廠 這個python裡可以使用 property實現,就是當呼叫的時候才生成.builder模式主要用於構建乙個複雜的物件,但這個物件構建的演算法是穩定的,物件中的各...