200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 观察者模式在制作披萨项目中的应用

观察者模式在制作披萨项目中的应用

时间:2020-08-04 19:26:18

相关推荐

观察者模式在制作披萨项目中的应用

项目代码连接:/test-patterns/observer

静态关系结构图如下:

一般情况下,厨房内的工作人员会在开始制作和制作完毕时,向外部发出一个信息。

观察者接口:Observer

1 class Observer():2 3def notify(self, arg):4 raise NotImplementedError

观察者动作:SMSNotification

1 class SMSNotification(Observer):2""" 对被观察者发出的通知采取相应动作 """3 4def notify(self, arg):5 print("SMS notification: " + arg)

观察者容器:Observable

class Observable():""" Base class for observable events """def __init__(self):self._observers = []def subscribe(self, observer):""" 将一个新的观察者加入容器,即队列self._observers """if observer not in self._observers:self._observers.append(observer)def unsubscribe(self, observer):""" 从容器中删除某一观察者 """self._observers.remove(observer)def notify(self, arg=None):""" 向容器中的每一个观察者发送通知 """for observer in self._observers:observer.notify(arg)

被观察者:PizzaOven

1 class PizzaOven(): 2""" 被观察者 """ 3 4def __init__(self): 5 self.pizza_started_event = PizzaOven.PizzaStartedEvent() 6 self.pizza_done_event = PizzaOven.PizzaDoneEvent() 7 8def make_pizza(self): 9 """ 做披萨动作 """10 self.pizza_started()11 time.sleep(random.randint(1, 5))12 self.pizza_done()13 14def pizza_started(self):15 """ 当开始做披萨时被调用 """16 self.pizza_started_event.notify("The pizza just started cooking")17 18def pizza_done(self):19 """ 当披萨完成时被调用 """20 self.pizza_done_event.notify("The pizza is done")21 22class PizzaStartedEvent(Observable):23 """ 观察者事件:开始做披萨 """24 def __init__(self):25 Observable.__init__(self)26 27class PizzaDoneEvent(Observable):28 """ 观察者事件:披萨完成 """29 def __init__(self):30 Observable.__init__(self)

观察者模式在百度百科上的定义为:观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

在以上观察者模式中可以体现出观察者模式的有点如下:

1、在观察者模式中,实现了模块的高内聚、低耦合。

2、在接口固定的情况下,可以很方便地通过对方法进行重写等操作来实现多态,从而可以使不同观察者对被观察者发出的信息采取不同的动作,极大地提高了代码的可维护性和鲁棒性。

3、被观察者与观察者可以实现一对多和多对多的关系,再次体现了模块之间高内聚、低耦合。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。