直譯器模式
多用於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...