设计模式之---观察者模式
来源:互联网 发布:网络十大小说排行榜 编辑:程序博客网 时间:2024/05/16 18:55
一、定义
观察者模式分为主题类和观察者类。当主题类管理监测的内容有变化时,会及时通知所有与这个主题绑定的观察者们。
二、实现
观察者模式是一对多依赖的关系:每个主题都依赖多个观察者。
每当有新的主题产生时,就需要加入观察者;
每当有观察者厌恶这个主题时,就会离开。
每当主题内容有变化时,就需要通知各个观察者。
所以,针对上述几个需求:主题类接口中需要包含:加入,删除,通知三个抽象方法。
而实现主题接口的类中,也需要有一个装观察者的队列。
例如:
现在有一个天气主题,很多人对这个感兴趣。
所以纷纷注册成为天气主题的观察者。
每当天气变化的时候,天气类就会把温度等参数及时通知给所有观察者。
三、类图和代码
package test;import java.util.ArrayList;import java.util.List;interface Observer{public void update(double temperature);}interface Theme{public void addObserver(Observer o);public void removeObserver(Observer o);public void notifyObserver();}class Weather implements Theme{List<Observer> obs;double temperature;Weather(){obs=new ArrayList<Observer>();}@Overridepublic void addObserver(Observer o) {// TODO Auto-generated method stubobs.add(o);}@Overridepublic void removeObserver(Observer o) {// TODO Auto-generated method stubobs.remove(o);}@Overridepublic void notifyObserver() {// TODO Auto-generated method stubfor(Observer i:obs){i.update(temperature);}}public void changeTemperature(double temperature){//...........this.temperature=temperature;}}class Person implements Observer {String name;Person(String name) {this.name = name;}@Overridepublic void update(double temperature) {// TODO Auto-generated method stubSystem.out.println(name+" has been notified the temperature = "+temperature);}}public class practice {public static void main(String[] args) {//生成主题Weather weather = new Weather();Theme t=weather;//加入三个观察者t.addObserver(new Person("zhangsan1"));t.addObserver(new Person("zhangsan2"));t.addObserver(new Person("zhangsan3"));//修改温度weather.changeTemperature(24);//通知观察者们t.notifyObserver();}}
四、适用场景
一个类的变化会要求其他关联类都产生相应变化的情况。
五、总结
观察者模式很好的解决了一对多关联关系中的多次重复修改问题,使得代码效率得到提升。
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 二叉树n0 = n2 + 1
- 如何解决chrome一打开就是360搜索页面(亲测有效)
- Noip2015提高组总结
- 从Java~dotNet 进化模式
- eclipse设置代理下载androidSDK
- 设计模式之---观察者模式
- ASP.NET MVC - loop model data in javascript
- Android系统源码极速搜索引擎(OpenGrok)
- HTML特殊符号对照表、常用的字符实体
- 截图保存格式问题-最好保存为png格式
- HDOJ 2013 蟠桃记
- 医疗大数据预处理
- Nginx服务器配置404页面
- HDOJ 2014 青年歌手大奖赛_评委会打分