欢迎来到天天文库
浏览记录
ID:38685004
大小:348.89 KB
页数:10页
时间:2019-06-17
《设计模式学习笔记-观察者模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学习设计模式已经有段时间了,这是总结的第一篇博客,文中有错误、漏洞之处,望各位支出,改正。 观察者模式 一、基本定义 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新。 在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展。 观察者模式又称为发布-订阅模式。 二、基本结构 首先先看观察
2、者模式的UML类图。 分析: Subject:目标。他把所有对观察者对戏的引用保存在一个聚集里,每一个主题都可以有多个观察者。 Observer:观察者。为所有的具体观察者定义一个接口,在得到主题的通知时能够及时的更新自己。 ConcreteSubject:具体主题。将有关状态存入具体观察者对象。在具体主题发生改变时,给所有的观察者发出通知。 ConcreteObserver:具体观察者。实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态相协调。 三、实现观察者模式 情景是这样的:在气象观测站中,它能够追踪目前的
3、天气状况,包括温度、适度、气压。需要实现一个布告板,能够分别显示目前的状态,气象统计和简单的预报。当气象站中获取最新的测量数据时,三种布告板必须实时更新。 下面是这个案例的设计图: 编码实现: 主题接口 Subject.java[java] viewplaincopyprint?1.public interface Subject { 2. /** 3. * 注册观察者 4. * @param observer 5. */ 6. public void registerObserver(Observer observer);
4、 7. 8. /** 9. * 删除观察者 10. * @param observer 1. */ 2. public void removeOberver(Observer observer); 3. 4. /** 5. * 当主题状态发生改变时,这个方法需要被调用,以通知所有观察者 6. */ 7. public void notifyObserver(); 8.} 观察者接口 Observer.java[java] viewplaincopyprint?1.public int
5、erface Observer { 2. public void update(float temp,float humidity,float pressure); 3.} 布告板显示接口DisplayElement.java[java] viewplaincopyprint?1.public interface DisplayElement { 2. public void display(); 3.} WeatherData实现主题接口WeatherData.java[java] viewplaincopyprint?1.public cl
6、ass WeatherData implements Subject{ 2. private List observers; 3. private float tempterature; 4. private float pressure; 5. private float humidity; 6. 7. public WeatherData(){ 8. observers = new ArrayList(); 1. } 2. 3. @Override 4
7、. public void notifyObserver() { 5. for(int i = 0; i < observers.size();i++){ 6. Observer observer = observers.get(i); 7. observer.update(tempterature, humidity, pressure); 8.
此文档下载收益归作者所有