在门面模式中,我们提到过火警报警器。在当时,我们关注的是通过封装减少代码重复。而今天,我们将从业务流程的实现角度,来再次实现该火警报警器。
class AlarmSensor: def run(self): print "Alarm Ring..." class WaterSprinker: def run(self): print "Spray Water..." class EmergencyDialer: def run(self): print "Dial 119..."以上是门面模式中的三个传感器类的结构。仔细分析业务,报警器、洒水器、拨号器都是“观察”烟雾传感器的情况来做反应的。因而,他们三个都是观察者,而烟雾传感器则是被观察对象了。根据分析,将三个类提取共性,泛化出“观察者”类,并构造被观察者。观察者如下:
class Observer: def update(self): pass class AlarmSensor(Observer): def update(self,action): print "Alarm Got: %s" % action self.runAlarm() def runAlarm(self): print "Alarm Ring..." class WaterSprinker(Observer): def update(self,action): print "Sprinker Got: %s" % action self.runSprinker() def runSprinker(self): print "Spray Water..." class EmergencyDialer(Observer): def update(self,action): print "Dialer Got: %s"