1. 总述
介绍:
观察者模式是行为模式,是将一个对象与其其他对象进行关联,当对象发生改变时 通知关联对象发生状态改变,自动刷新状态。这个模式作用是一种同步通信的手段, 是对象与关联对象保持同步。
可以用于以下场景:
- 侦听事件驱动程序设计中的外部事件
- 侦听/监视某个对象的状态变化
- 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等) 被触发时,通知邮件列表中的订阅者
2.代码
因为时间原因直接粘贴代码了,注释很清楚。
1.测试类
package Jobserver;
import java.util.Observer;
/**
* 观察者模式:
* <p>
* 模式:行为模式
* <p>
* 介绍:
* 观察者模式是行为模式,是将一个对象与其其他对象进行关联,当对象发生改变时
* 通知关联对象发生状态改变,自动刷新状态。这个模式作用是一种同步通信的手段,
* 是对象与雨来对象保持同步。
* <p>
* 组成:
* subject被观察对象:
* 被观察的对象。当需要被观察的状态发生变化时,
* 需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表
* concreateSubject 具体观察者:
* Observer被观察者:
* ConcreateObserver被观察者的具体实现:
* <p>
* 图示:
*
* <p>
* 优缺点:
* <p>
* 案例:
* 侦听事件驱动程序设计中的外部事件
* 侦听/监视某个对象的状态变化
* 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)
* 被触发时,通知邮件列表中的订阅者
*/
public class MainClass {
//使用jdk提供的工具类Observer,模拟发送订阅通知
public static void main(String[] args) {
Pusher pusher = new Pusher();
//添加观察者
pusher.addObserver(new Accepter());
pusher.addObserver(new Accepter());
pusher.addObserver(new Accepter());
//发送最新推送消息
pusher.putNews();
}
}
- 被观察者
package Jobserver;
import java.util.Observable;
/**
* 信息推送者,(被观察者)
*/
public class Pusher extends Observable {
//推送者发送新的信息
public void putNews(){
System.out.println("写了一个新的段子,我要发送给我的关注粉丝");
//状态改变
this.setChanged();
//通知观察者更新状态
this.notifyObservers();
}
}
package Jobserver;
import java.util.Observable;
import java.util.Observer;
/**
* 接受者(观察者)
* 需要实现Observer接口,定义统一的调用接口
*/
public class Accepter implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println(o.toString() + "----状态改变,关联对象刷新状态");
}
}
关于jdk的被观察者父类和观察者接口的分析可以查看我github上的另一个案例。
github地址: https://github.com/mashenghao/design