您好,欢迎访问三七文档
2观察者(Observer)模式让你的对象知悉现况认识观察者模式我们看看报纸和杂志的订阅:报社的业务是出版报纸向某家报社订阅报纸,只要他们有新报纸出版,就会向你送来。只要你是他们的客户,你就会一直收到新报纸当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来只要报社还在运营,就会一直有人(或单位)向他们订阅报纸或取消订阅报纸认识观察者模式出版者+订阅者=观察者模式出版社即主题(Subject)订阅者即观察者(Observer)认识观察者模式2认识观察者模式认识观察者模式认识观察者模式8认识观察者模式认识观察者模式1414定义观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新观察者模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。观察者模式意图定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新观察者模式结构图观察者模式结构图各角色解析:Subject抽象主题:提供一个接口,可增加和删除观察者对象ConcreteSubject具体主题:当其内部状态改变时,给所有登记过的观察者发出通知Observer抽象观察者:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己ConcreteObserver具体观察者:实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调观察者模式适用场景:1.当一个抽象模型有两个方面,其中一个方面依赖于另一个方面2.当对一个对象的改变需要同时改变其它对象,而不知道具体有多少个对象待改变3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换句话说,你不希望这些对象是紧密耦合的观察者模式缺点:由于观察者并不知道其他观察者的存在,它可能对目标的最终代价一无所知,可能会引起意外的更新优点:1、观察者和主题之间的耦合度较小2、支持广播通信观察者模式--体现的设计原则思考:观察者模式是如何遵循“封装变化点”、“针对抽象编程”及“多用组合,少用继承”等设计原则的?观察者模式--体现的设计原则设计原则“开-闭原则”,也即是对扩展开放,对修改关闭。观察者模式--体现的设计原则观察者模式--体现的设计原则设计原则“里氏替换原则”,也即是子类能替换父类。观察者模式--体现的设计原则设计原则为了交互对象之间的松耦合而努力。观察者模式的应用练习一:观察者模式的应用练习一分析:气象站:由WeatherData对象负责追踪目前的天气状况(温度、湿度、气压)。有三种布告板,分别显示目前的状况、气象统计及简单的预报。当WeatherObject对象获得最新的测量数据时,三种布告板必须实时更新结合观察者模式,给出其设计方案?观察者模式的应用观察者模式的应用练习二:某程序以多种不同的形式展示相同的数据,展示的方式可能是表格、柱状图、饼图等。当数据发生变化时,所有的展示方式都需要同步更新。如何设计,来灵活应对展示方式的不确定性呢?观察者模式的应用观察者模式的应用练习三:在机房上课时间,老师若有事出去一下,这时班里同学有打游戏、看电影的等。这些玩的同学一般都会找一个“放哨”的,如果老师回来了就让通知他们。如果这个“放哨”的同学没有注意到老师回来了,也即是没有通知正在玩的同学说老师回来了,想想后果怎么样?这个时候肯定是老师本人“通知”正在玩的同学。结合此场景,利用观察者模式,给出其设计类图观察者模式的应用观察者模式作业班会通知班长临时通知大家一件事,辅导员有事,班会取消不。当大家听到这个消息的时候,不再进教室开会了,而是各忙各的事。辅导员的状态决定了大家的行为方式,也即是大家的行为方式是随辅导员的状态改变而改变的。试结合观察者设计模式,给出其设计类图并写出其相应代码
本文标题:第2章观察者模式.
链接地址:https://www.777doc.com/doc-2155224 .html