设计模式学习笔记-观察者模式

设计模式学习笔记-观察者模式

ID:38685004

大小:348.89 KB

页数:10页

时间:2019-06-17

设计模式学习笔记-观察者模式_第1页
设计模式学习笔记-观察者模式_第2页
设计模式学习笔记-观察者模式_第3页
设计模式学习笔记-观察者模式_第4页
设计模式学习笔记-观察者模式_第5页
资源描述:

《设计模式学习笔记-观察者模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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.       

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。