python 設計模式

2021-08-28 13:44:21 字數 1764 閱讀 5850

一、單例模式:

確保乙個類只有乙個例項, 並提供全域性訪問點. 

class single:

""" 單例模式 """

_singleton = none

def __new__(cls, *args, **kwargs):

if not cls._singleton:

cls._singleton = super(single, cls).__new__(cls, *args, **kwargs)

return cls._singleton

二、共享模式:

能解決單例模式的多繼承問題

class borg:

""" 共享模式一 """

_we_are_one = {}

def __new__(cls, *args, **kwargs):

self = object.__new__(cls, *args, **kwargs)

self.__dict__ = cls._we_are_one

return self

def borg(cls):

""" 共享模式二(裝飾器版) """

cls._state = {}

orig_init = cls.__init__

def new_init(self, *args, **kwargs):

self.__dict__ = cls._state

orig_init(self, *args, **kwargs)

cls.__init__ = new_init

return cls

@borg

class a:

pass

三、策略模式

from hashlib import md5,sha1

class streamhasher:

""" 策略模式

>>> from hashlib import md5,sha1

>>> m5=streamhasher(md5)

>>> m5(open('m模式.py'))

'34ef7b42207e610a9948eadb34c5d994'

>>> s1=streamhasher(sha1)

>>> s1(open('m模式.py'))

'ab0b4c103db64e85993e73452d93141c01504c54'

"""def __init__(self,algorithm,chunk_size=4096):

self.chunk_size = chunk_size

self.hash = algorithm()

def __call__(self, stream):

for chunk in iter(lambda: stream.read(self.chunk_size),''):

self.hash.update(chunk.encode('utf-8'))

return self.hash.hexdigest()

四、原型模式

import copy

class prototype:

""" 原型模式 """

def clone(self):

return copy.deepcopy(self)

Python設計模式 狀態設計模式

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

python設計模式 原形設計模式

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

Python 設計模式

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