设计模式之---观察者模式

来源:互联网 发布:网络十大小说排行榜 编辑:程序博客网 时间: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
原创粉丝点击