首先了解下观察者模式的概念;
观察者模式:定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态的时候,它的所有依赖者都会受到通知并自动更新;
下面了做个简单小测试。
定义目标类,继承Observable类:
public class MySubject extends Observable{ //目标需要通知观察者的内容 private String msg; public void set(String s) { this.msg=s; //setChanged()将changed状态改为true setChanged(); //在changed改为true后才能通知所有观察者,并再将changed改为false notifyObservers(msg); } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
定义观察者类,实现Observer接口:
public class ObjectA implements Observer { private String msg; @Override public void update(Observable o, Object arg) { //装换目标类并获取目标类需要通知的内容 msg=((MySubject)o).getMsg(); } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
下面就开始测试,观察者可以是多个:
public class Test { public static void main(String[] args) { //创建目标对象 MySubject ms=new MySubject(); //创建观察者对象 ObjectA obj1=new ObjectA(); ObjectA obj2=new ObjectA(); ObjectA obj3=new ObjectA(); //addObserver(obj)是Suject类自带的添加观察者方法 ms.addObserver(obj1); ms.addObserver(obj2); ms.addObserver(obj3); ms.set("今晚一起吃小龙虾"); System.out.println(obj1.getMsg()); System.out.println(obj2.getMsg()); System.out.println(obj3.getMsg()); }}
类似群发信息给三个朋友(obj1,obj2,obj3),今晚一起吃小龙虾,他们同时收到消息。测试结果如下:
今晚一起吃小龙虾
今晚一起吃小龙虾今晚一起吃小龙虾观察者模式总结:
目标对象需要继承Observable,通过setChanged()和notifyObservers()通知观察者;
观察者需要实现Observer接口,通过.addObserver(this)来注册成为观察者,依靠update(Observable o, Object arg)来获取目标对象传递的数据。