java设计模式—观察者模式
一.概述
在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。这有点像我们的maven,比如maven的pom.xml删除某个依赖包时,eclipse里的代码就会做出相应的错误提示。
二.应用场景
1.微信公众号服务,发布消息时,关注公众号就可以收到推送消息
2.微博的订阅,当我们订阅了某个人的微博账号,当这个人发布了新的消息,就会通知我们
3.订阅火车票之后,需要记录日志,也需要发送短信
4.事件消息
三.模式示例:
1.创建被观察者类
public class ObservableDemo extends Observable{
private String message = "";
public ObservableDemo(){ }
public String getMessage(){
return message;
}
public void setMessage(String message){
if(!this.message.equals(message)){
this.message = message;
setChanged(); //标注已经被更改
this.notifyObservers(message); //通知观察者数据已被更改
}
}
}
2.创建观察者类
public class ObserverDemo implements Observer{
private String observerName;
public ObserverDemo(String observerName) {
this.observerName = observerName;
}
@Override
public void update(Observable o, Object arg) {
if(o instanceof ObservableDemo){
System.out.println(observerName + "新消息:"+arg);
}
}
}
3.模式调用
public class Test {
public static void main(String args[]){
ObservableDemo observableDemo=new ObservableDemo();
ObserverDemo A = new ObserverDemo("A");
ObserverDemo B = new ObserverDemo("B");
ObserverDemo C = new ObserverDemo("C");
observableDemo.addObserver(A);
observableDemo.addObserver(B);
observableDemo.addObserver(C);
observableDemo.addObserver(new Observer(){
@Override
public void update(Observable o, Object arg) {
System.out.println("new Observer");
}
});
observableDemo.setMessage("nihao1");
observableDemo.setMessage("nihao1");
}
}