python 设计模式之 - 行为模式

[size=large][b][color=red]Vistor 模式:[/color]
[/b] [/size]
[size=large]Vistor 模式常常用于将访问数据,支持传入不同的数据访问器(或是处理器),上例子[/size]


def visit(directory, visitor):
for root, dirs, files in os.walk(directory):
for f in files:
ext = os.path.splitext(f)[-1][1:]
if hasattr(visitor,ext):
a = getattr(visitor,ext)
a(f)
class FileReader(object):
"""
File Reader
"""
def bmp(self,f):
print "is bmc",f
visit("d:\\eastmoney\\",FileReader())

is bmc btclose.bmp
is bmc btclose2.bmp
is bmc btclosedown.bmp
is bmc btmax.bmp



[size=large][b][color=red]Observer 模式:[/color]
[/b] [/size]
[size=large]Observer 模式常常用于侦听对象发生的变化,上例子[/size]

class Event(object):
_observers = []
def __init__(self, subject):
self.subject = subject

@classmethod
def register(cls, observer):
if observer not in cls._observers:
cls._observers.append(observer)
@classmethod
def unregister(cls, observer):
if observer in cls._observers:
self._observers.remove(observer)

@classmethod
def notify(cls, subject):
event = cls(subject)
for observer in cls._observers:
observer(event)

class WriteEvent(Event):
def __repr__(self):
return 'WriteEvent'

def log(event):
print '%s was written' % event.subject

WriteEvent.register(log)

WriteEvent.notify('a given file')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值