设计模式学习笔记-观察者模式资料_第1页
设计模式学习笔记-观察者模式资料_第2页
设计模式学习笔记-观察者模式资料_第3页
设计模式学习笔记-观察者模式资料_第4页
设计模式学习笔记-观察者模式资料_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习设计模式已经有段时间了,这是总结的第一篇博客,文中有错误、漏洞之处,支出,改正。何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于观察者模式又称为发布-订阅模式。Subject:目标。他把所有对观察者对戏的引用保存在一个聚集里,每一个主题都可以有多个观察者。Observer:观察者。为所有的具体观察者定义一个接口,在得到主题的通知时能够及时的更新自己。象。在具体主题发生改变时,给所有的观察者发出通知。ver的更新接口,以便使本身的状态与主题状态相协调。情景是这样的:在气象观测站中,它能够追踪目前的天气状况,包括温度、适度、气压。需要实现一个布告板,能够分别显示目前的状态,气象统计和简单的预报。当气象站中获取最新的测量数据时,三种主题接口[java]viewplaincopyprint?Subject.java11.publicinterfaceSubject{2./**3.*注册观察者4.*@paramobserver5.*/6.publicvoidregisterObserver(Observerobserver);8./**9.*删除观察者10.*@paramobserver111.*/12.publicvoidremoveOberver(Observerobserver);14./**15.*当主题状态发生改变时,这个方法需要被调用,以通知所有观察者16.*/17.publicvoidnotifyObserver();观察者接口Observer.java[java]viewplaincopyprint?1.publicinterfaceObserver{2.publicvoidupdate(floattemp,floathumidity,floatpressure);3.}布告板显示接口DisplayElement.java[java]viewplaincopyprint?1.publicinterfaceDisplayElement{2.publicvoiddisplay();3.}WeatherData实现主题接口WeatherData.java[java]viewplaincopyprint?1.1.publicclassWeatherDataimplementsSubject{2.privateList<Observer>observers;3.privatefloattempterature;4.privatefloatpressure;5.privatefloathumidity;7.publicWeatherData(){8.observers=newArrayList<Observer>();9.}11.@Override12.publicvoidnotifyObserver(){13.for(inti=0;i<observers.size();i++){14.Observerobserver=observers.get(i);15.observer.update(tempterature,humidity,pressure);16.}17.}19.@Override20.publicvoidregisterObserver(Observerobserver){21.observers.add(observer);22.}24.@Override25.publicvoidremoveOberver(Observerobserver){26.inti=observers.indexOf(observer);27.if(i>=0){28.observers.remove(i);29.}30.}32./**33.*气象站得到更新的观测数据时,通知观察者34.*/35.publicvoidmeasurementChanged(){36.notifyObserver();37.}39.publicvoidsetMeasurements(floattemperature,floathumidity,floatpress40.this.tempterature=temperature;41.this.humidity=humidity;42.this.pressure=pressure;43.measurementChanged();44.}布告板CurrentCondituonDisplay.java[java]viewplaincopyprint?11.publicclassCurrentConditionsDisplayimplementsObserver,DisplayElement{2.privatefloattemperature;3.privatefloathumidity;4.privateSubjectweatherData;6.publicCurrentConditionsDisplay(SubjectweatherData){7.this.weatherData=weatherData;8.weatherData.registerObserver(this);//注册观察者9.}11.publicvoidupdate(floattemp,floathumidity,floatpressure){12.this.temperature=temp;13.this.humidity=humidity;14.display();15.}17.@Override18.publicvoiddisplay(){reesand20.}测试程序WeatherStation[java]viewplaincopyprint?1.1.publicclassWeatherStation{3.publicstaticvoidmain(String[]args){4.WeatherDataweatherData=newWeatherData();6.CurrentConditionsDisplayconditionsDisplay=newCurrentConditionsDirData8.weatherData.setMeasurements(80,65,30.4f);9.weatherData.setMeasurements(82,70,29.2f);10.weatherData.setMeasurements(78,78,40.4f);11.}运行运行过程1、当两个对象之间送耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间送耦合。主题所知道只是一个具体的观察者列表,每一个具体观察者都符合一个抽象观察者的接口。主题并不认识任何一个具体的观察者,它2、观察者模式支持“广播通信”。主题会向所有的观察者发3、观察者模式符合“开闭原则”的要求。很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。目标会触发它们之间进行循环调用,可能导致系统崩溃。对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。1、一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。2、一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。3、一个对象必须通知其他对象,而并不知道这些对象是谁。需1、观察者模式定义了对象之间的一对多关系。多个观察者监听2、观察者模式中包含四个角色。主题,它指被观察的对象。具体主题是主题子类,通常它包含有经常发生改变的数据,当它的状态发生改变时,向

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论