python设计模式名片_python设计模式

解释器模式

多用于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:

self.observers.append(observer)

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值