观察者其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息
存在的角色有被观察者--->发布者 观察者--->订阅者
下面以java JDK中已有的观察者设计模式代码,展示使用:
被观察者
/**
* 被观察者 消息发布者
* @author dell
*
*/
public class PushManager extends Observable{
class Message{
private String title;
private String message;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
public void pushMessage(String title,String message){
System.out.println("您有新的消息");
Message m = new Message();
m.setTitle(title);
m.setMessage(message);
this.setChanged();
this.notifyObservers(m);
}
}
观察者
/**
* 观察者, 被观察者改变,观察者对应的信息改变
* @author dell
*
*/
public class SubcribeManager implements Observer{
public SubcribeManager(PushManager p) {
super();
p.addObserver(this); //被观察者注册观察者
}
//arg为被观察者到观察者传递的参数
public void update(Observable o, Object arg) {
PushManager.Message m = (PushManager.Message)arg;
System.out.println(m.getTitle() + ":" + m.getMessage());
}
}
测试发布,订阅
public class TestManager {
public static void main(String[] args) {
PushManager p = new PushManager();
SubcribeManager m = new SubcribeManager(p);
p.pushMessage("新闻", "123434");
}
}
输出结果:
您有新的消息
新闻:123434