1第13章行为型模式2行为型模式•职责链模式(chainofresponsibility)•命令模式(command)•解释器模式(interpreter)•迭代器模式(iterator)•中介者模式(mediator)•备忘录模式(memento)•观察者模式(observer)•状态模式(state)•策略模式(strategy)•模板方法模式(templemethod)•访问者模式(visitor)3观察者模式(Observer)概述•在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”:当一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。45观察者模式——意图•意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。6观察者模式——结构7观察者模式——参与者•①Subject接口:抽象了主题类,这样将来不管是什么主题只要实现这个接口就可以发起主题活动。•②Observer接口:抽象了观察者类,不管是什么类型的观察者都可以通过实现观察者接口来具有观察主题通知的功能。8观察者模式——参与者•③ConcreteSubject类:实现了主题抽象,实现具体的功能。对应我们上边的HappyBar类,用来维护和发起活动通知。•④ConreteObserver类:实现了观察者的抽象,实现具体功能。对应我们上边的QQMember类,用来观察主题类的通知,并更新自身的状态。生活中的例子9气象监测应用的概况10气象监测应用的概况•WeatherData对象知道如何跟物理气象站联系,以取得更新的数据。WeatherData对象会随即更新三个布告板的显示:目前状况、气象统计和天气预报。•如果接受这个项目,我们的工作就是建立一个应用,利用WeatherData对象取得数据,并更新三个布告板:目前状况、气象统计和天气预报。11已有的WeatherData类12开发什么呢?13一个错误的示范14SharpenYourpencil15认识观察者模式16认识观察者模式17定义观察者模式•观察者模式:定义了对象之间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。18定义观察者模式19定义观察者模式:类图20松耦合的威力•当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节。•松耦合的设计之所以能主我们建立有弹性的OO系统,能够更好应对变化,是因为对象之间的互相依赖降至了最低限度。•观察者模式提供了一种对象设计方式,让主题和观察者之间松耦合。21设计气象站22实现气象站23在WeatherData中实现主题接口24在WeatherData中实现主题接口25建立布告板26启动气象站•建立一个测试程序27启动气象站•运行程序28