观察者模式

观察者模式

#三个传感器类:报警器、洒水器、拨号器都是“观察”烟雾传感器的情况来做反应的。因而,他们三个都是观察者,

而烟雾传感器则是被观察对象了。根据分析,将三个类提取共性,泛化出“观察者”类,并构造被观察者。

#观察者如下
class Observer:
def update(self):
pass

class AlarmSensor(Observer):# 报警器 观察者1
def update(self,action):
print (“Alarm Got: %s” % action)
self.runAlarm()
def runAlarm(self):
print (“Alarm Ring…”)

class WaterSprinker(Observer):# 洒水器 观察者2
def update(self,action):
print(“Sprinker Got: %s” % action)
self.runSprinker()
def runSprinker(self):
print (“Spray Water…”)

class EmergencyDialer(Observer):# 拨号器 观察者3
def update(self,action):
print (“Dialer Got: %s”%action)
self.runDialer()
def runDialer(self):
print (“Dial 119…”)

#观察者中定义了update接口,如果被观察者状态比较多,或者每个具体的观察者方法比较多,

可以通过update传参数进行更丰富的控制。

#下面构造被观察者
class Observed: # 被观察者 基类
observers=[] # 观察者列表,用来装观察者
action=""
def addObserver(self,observer):
self.observers.append(observer)
def notifyAll(self):
for obs in self.observers:
obs.update(self.action)

class smokeSensor(Observed):# 被观察者 具体类
def setAction(self,action):
self.action=action
def isFire(self):
return True

#被观察者中首先将观察对象加入到观察者数组中,若发生情况,则通过notifyAll通知各观察者。

def client(): #业务代码
alarm = AlarmSensor()
sprinker = WaterSprinker()
dialer = EmergencyDialer()

smoke_sensor = smokeSensor()
smoke_sensor.addObserver(alarm) # 被观察者 添加 观察者
smoke_sensor.addObserver(sprinker)
smoke_sensor.addObserver(dialer)

if smoke_sensor.isFire():
    smoke_sensor.setAction("On Fire!")
    smoke_sensor.notifyAll()

client()
“”"
打印如下:
Alarm Got: On Fire!
Alarm Ring…
Sprinker Got: On Fire!
Spray Water…
Dialer Got: On Fire!
Dial 119…
“”"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值