观察者模式 一个被观察的对象发生改变,所有观察者都会收到消息。
什么情况用观察者模式呢?
比如微信订阅,我喜欢杨幂,订阅杨幂新闻,每次杨幂的新闻有新消息了,那么通知我一下。
那么怎么建立观察者模式呢?java.util包里给了实现,我们引用下就可以。
首先建立一个Dog类,让他可以被观察,需要继承Observable类。
public class Dog extends Observable {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
//这里提示状态改变,必须设置,否则不会发出通知
this.setChanged();
//这里通知所有观察者
this.notifyObservers();
this.status = status;
}
}
然后建立一个People类,实现observer接口。(表示他是一个观察者)
public class People implements Observer{
private String name;
//观察者名字
public People(String name){
this.name=name;
}
@Override
public void update(Observable o, Object arg) {
//通知的消息
System.out.println(name+"看到狗狗饿了");
}
}
然后建立一个Test类。
public class Test {
public static void main(String[] args) {
People person1=new People("汤姆");
People person2=new People("杰瑞");
Dog dog=new Dog();
//给dog注册观察者
dog.addObserver(person1);
dog.addObserver(person2);
dog.setStatus("1");
}
}
运行,结果如下:
可以看到,两个person都收到通知了。
这是引用了java.util包,所以很简单,大家感兴趣的可以自己试着写一写具体实现。