定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
被观察者要继承: Observable类 实现消息推送 、setChanged notifyObservers();
观察者要继承: Observer类 实现updata(); 注册
package 观察者模式; import java.util.Observable; import java.util.Observer; /** * * @author 红尘Dream * 观察者模式: 一对多的模式 * 当被观察者发生变化时, 观察者会受到通知自动更新 * 服务被观察者 : 推送消息 通知观察者 * 观察者: 订阅主题 自动更新消息 */ public class Test { public static void main(String[] args) { Service s = new Service(); //创建被观察者 服务者 Observerl o = new Observerl(); //创建观察者 Observerl o1 = new Observerl(); //创建观察者 Observerl o2 = new Observerl(); //创建观察者 Observerl o3 = new Observerl(); //创建观察者 Observerl o4 = new Observerl(); //创建观察者 o.registerService(s);//订阅服务 o1.registerService(s); o2.registerService(s); o3.registerService(s); o4.registerService(s); //取消订阅 o1.unRegisterService(s); s.setMsg("今天新闻热点"); } } /** * 服务类 被观察者 用于推送消息 */ class Service extends Observable { private String msg; public String getMsg() { return msg+"(来自服务者(被观察者))"; } /** * * 推送消息 */ public void setMsg(String msg) { this.msg = msg; setChanged();//设置改变 notifyObservers();// 通知观察者 } }
/**
* 被观察者 类
*/ class Observerl implements Observer { /** * 订阅 服务 * */ public void registerService(Observable observable) { observable.addObserver(this); } /** * 取消订阅 */ public void unRegisterService(Observable observable) { observable.deleteObserver(this); } /** * 实现观察者的更新方法 */ @Override public void update(Observable arg0, Object arg1) { if(arg0 instanceof Service) { Service s = (Service) arg0; System.out.println("观察者更新:"+s.getMsg()); } } }
执行结果:
观察者更新:今天新闻热点(来自服务者(被观察者))
观察者更新:今天新闻热点(来自服务者(被观察者))
观察者更新:今天新闻热点(来自服务者(被观察者))
观察者更新:今天新闻热点(来自服务者(被观察者))