10周-1 设计模式―观察者模式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

观察者模式观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结手机消息推送Email网站假如不使用设计模式观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结假如不使用设计模式OlympicMobileUpdate(doubledata…)EmailUpdate(doubledata…)WebUpdate(doubledata…)观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结假如不使用设计模式OlympicMobileUpdate(doubledata)EmailUpdate(doubledata)ConsoleProgramUpdate(doubledata)publicclassMobile{publicvoidupdate(doubledata){//…}}publicclassEmail{publicvoidupdate(doubledata){//…}}publicclassWeb{publicvoidupdate(doubledata){//…}}classOlymplic{Mobilemobile;Emailemail;Webweb;publicvoidchanged(doubledata…){mobile.update(data);email.update(data);web.update(data);}}强依赖、紧耦合、不能抵御变化Olympic观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结依赖倒置原则/开闭原则WebUpdate(doubledata)EmailUpdate(doubledata)MobileUpdate(doubledata)《interface》Update(doubledata)《abstractclass》一多变化通知更新观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结报社出版报纸读者订阅报纸报社为订户发送报纸读者取消订阅出版者主题Subject订阅者观察者Observer观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结报纸消息与订阅者读者1读者3读者2神舟十一号许多观察者读者4要注册(订阅)主题对象观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结报纸消息与订阅者读者1读者3读者2神舟十一号主题对象许多观察者读者4观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结读者1读者3读者2神舟十一号许多观察者读者4主题对象报纸消息与订阅者观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结读者1读者3读者2神舟十一号许多观察者读者4要删除(取消订阅)主题对象报纸消息与订阅者观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结报纸消息与订阅者读者1读者3读者2神舟十一号许多观察者读者4主题对象观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结报纸消息与订阅者读者1读者3读者2神舟十一成功许多观察者读者4主题对象观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结观察者的一天读者1读者2报纸消息许多观察者读者4主题对象ConcreteSubjectConcreteObserverObserverUpdate()ConcreteObserverConcreteObserverregisterObserver()notifyObserver()removeObserver()SubjectlistIObserverregisterObserver(IObeserver)notifyObservers()removeObserver(IObeserver)观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结SubjectlistIObserverregisterObserver(IObeserver)notifyObservers()removeObserver(IObeserver)IObserverUpdate(doubledata)观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结WebUpdate(doubledata)EmailUpdate(doubledata)MobileUpdate(doubledata)OlympicIObserverUpdate(doubledata)SubjectlistIObserverregisterObserver(IObeserver)notifyObservers()removeObserver(IObeserver)OlympicSubjectlistIObserverregisterObserver(IObeserver)notifyObservers()removeObserver(IObeserver)观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结WebUpdate(doubledata)EmailUpdate(doubledata)MobileUpdate(doubledata)IObserverUpdate(doubledata)publicabstractclassSubject{publicListIObserverobservers=newListIObserver();publicvoidregisterObserver(IObserverobserver){observers.Add(observer);}virtualpublicvoidnotifyObservers(doubledata){foreach(IObserverobserverinobservers){observer.update(data);}}publicvoidremoveObserver(IObserverobserver){observers.Remove(observer);}}publicclassOlympicimplementsSubject{…publicvoidchanged(doubledata){notifyObservers(data);}}观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结实质发布者与订阅者的一对多依赖关系发布者改变时,自动通知订阅者进行更新效果主题和观察者之间的松耦合,使得二者可以被独立改变主题变化将自动广播通知,不关心具体观察者观察者模式项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结ConcreteobserverUpdate(doubledata)SubjectlistIObserverregisterObserver()notifyObservers()removeObserver()ConcreteSubjectIObserverUpdate(doubledata)练习:一个春游计划春游计划(SpringTourPlan)管理系统需要发布春游信息,维护报名者(Participant)集合;感兴趣的人可以报名参加;需要向所有的报名者发布(notify)有关春游计划的信息;每一个报名者收到信息后,将会以自己的方式到达(update)集合地点。项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结Planinterface+registerParticipant(parti:Participant)+removeParticipant(parti:Participant)+notifyAll()Participantinterface+update()SpringTourPlan0..*MemberAMemberB项目背景认识观察者模式使用观察者设计项目使用观察者实现项目总结练习:一个春游计划

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功