写了个简单的 观察者模式 “老板来了”
代码一点点,去感觉有点丑陋
# -*- coding: utf-8 -*-
# python 观察者设计模式 老板来了
# 观察者基类
class Subject(object):
def __init__(self):
self._observers = []
# 添加观察者
def attach(self, observer):
if not observerin self._observers:
self._observers.append(observer)
# 删除观察者
def detach(self, observer):
try:
self._observers.remove(observer)
except ValueError:
print"this is not my observer"
# 变化通知
def notify(self):
for observer in self._observers:
method = getattr(observer, 'update')
if callable(method):
return method(self)
class Boss(Subject):
def __init__(self,status=False):
super(Boss,self).__init__()
self._status = status
@property
def status(self):
return self._status
@status.setter
def status(self,value):
self._status = value
print"boss's coming status"
self.notify()
class Observer:
def update(self,subject):
raise NotImplementedError("Observer need a 'update' method")
class Programmer(Observer):
def update(self, subject):
if subject.status == True:
print"start to work"
else:
print "play games"
class Friend(Observer):
def update(self,subject):
if subject.status == True:
print"tell others boss is coming"
else:
print"keep eyes on the door"
class MixedIn:
pass
if __name__ == '__main__':
me = Programmer()
myfriend = Friend()
mixed = MixedIn()
boss = Boss()
boss.attach(me)
boss.attach(myfriend)
boss.attach(mixed)
boss.status = True
boss.status = False
往高手指点~