python設計模式名片 python設計模式

2021-10-19 03:44:22 字數 2114 閱讀 7757

直譯器模式

多用於dsl,領域專用語言,

from pyparsing import word, oneormore, optional, group, suppress, alphanums

word = word(alphanums)

command = group(oneormore(word))

token = suppress("->")

device = group(oneormore(word))

argument = group(oneormore(word))

event = command + token + device + optional(token + argument)

上面的event可以用

event.parsestring(t)

解析出t

'open -> gate' 或者

'increase -> boiler temperature -> 5 degrees'

並從中提取出open,gate用於自定義的操作。

觀察者模式

乙個物件的屬性的改變可以同時通知觀察者,定義觀察者hexformatter

class hexformatter:

def notify(self, publisher):

print("{}: '{}' has now hex data = {}".format(type(self).__name__, publisher.name, hex(publisher.data)))

觀察物件

class publisher:

def __init__(self):

self.observers =

#新增觀察者

def add(self, observer):

if observer not in self.observers:

else:

print('failed to add: {}'.format(observer))

def remove(self, observer):

try:

self.observers.remove(observer)

except valueerror:

print('failed to remove: {}'.format(observer))

def notify(self):

[o.notify(self) for o in self.observers]

class defaultformatter(publisher):

def __init__(self, name):

publisher.__init__(self)

self.name = name

self._data = 0

def __str__(self):

return "{}: '{}' has data = {}".format(type(self).__name__, self.name, self._data)

#以object.data方式訪問變數

@property

def data(self):

return self._data

#改變data值,最後通知觀察者

@data.setter

def data(self, new_value):

try:

self._data = int(new_value)

except valueerror as e:

print('error: {}'.format(e))

else:

self.notify()

介面卡模式

class adapter:

def __init__(self,obj,adapter_method):

self.obj = obj

#add obj attr

#var = vars(obj)

#self.__dict__.update(var)

self.__dict__.update(adapter_method)

def __str__(self):

return str(self.obj)

設計模式名錄

這個部分的主要任務就是使用各種方法建立 或組合 各種型別的物件,並向物件的使用者隱藏物件的建立過程。定義乙個介面 抽象工廠 用於建立一系列相關或相互依賴的物件,而不需要指定它們的具體型別.在應用抽象工廠過程中,元件通過一系列的抽象工廠決定最終的結構,而元件的使用者則必須選擇使用其中乙個抽象工廠來建立...

資料庫設計模式 名值模式

三 名值模式 名值模式,通常用來描述在系統設計階段不能完全確定屬性的物件,這些物件的屬性在系統執行時會有很大的變更,或者是多個物件之間的屬性存在很大的差異。1.使用名值模式進行設計時,如果對 其他屬性 僅作瀏覽儲存 不作其它任何特殊處理,則通常會設計乙個 屬性模板 表,該錶的資料記錄在系統執行時動態...

Python設計模式 狀態設計模式

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