Observer
行为模式之一
当一个对象的状态发生变化时(被观察),能够自动通知其他关联对象,自动刷新对象状态。
提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
Subject(被观察者)(继承Observable,通过setChanged(),notifyObservers()方法通知)
被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维护(增,删,通知)一个观察者对象的队列。
Concrete Subject
被观察者的具体实现,包含一些基本的属性状态及其它操作。
Observer(观察者)
接口或抽象类。当Subject的状态发生变化时,Observer对象通过一个callBack函数得到通知
ConcreteObserver(实现Observer,重写update()方法)
观察者的具体实现,得到通知后将完成一些具体的业务逻辑处理。
public class MyObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("对象发生变化");
}
}
public class Person extends Observable {
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
this.setChanged();//默认对象没改变,需要手动设置
//System.out.println(this.hasChanged());
this.notifyObservers();//名字改变使通知
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
this.setChanged();//默认对象没改变,需要手动设置
//System.out.println(this.hasChanged());
this.notifyObservers();//名字改变使通知
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
this.setChanged();//默认对象没改变,需要手动设置
//System.out.println(this.hasChanged());
this.notifyObservers();//名字改变使通知
}
}