什么是观察者模式
观察者是行为模式之一,它的作用当一个对象的状态发生变化时,能够自动通知关联对象,自动刷新对象状态。
observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
Subject 被观察者
被观察的对象,当需要被观察的状态发生改变时,需要通知队列中所有观察者对象。被观察者需要维护一个观察者对象的队列列表
观察者
观察者是抽象类,当被观察者状态发生改变,观察者对象通过一个callback函数得到通知。
//这样这个类,继承这个表示可以被观察。
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.notifyObservers();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
//当sex值被改变通知观察者。
this.notifyObservers();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
this.notifyObservers();
}
}
public class MyObserver implements Observer {
//当被观察者对象的值发生改变,观察者可以观察到并且调用这个方法。
@Override
public void update(Observable o, Object arg) {
System.out.println("发生变化了");
}
}
public class Main {
public static void main(String[] args) {
Person person=new Person();
person.setName("long");
}
}
这样运行不会出现什么,因为观察者必须要进行注册。
//这样这个类,继承这个表示可以被观察。
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();
this.notifyObservers();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
//表示状态被改变,设置就是表示你对象的值改变了然后就会通知notify
//如果没有setchange就接受不了通知。
this.setChanged();
//当sex值被改变通知观察者。
this.notifyObservers();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
this.setChanged();
this.notifyObservers();
}
}
public class Main {
public static void main(String[] args) {
Person person=new Person();
//注册观察者
person.addObserver(new MyObserver());
// System.out.println(person.countObservers());
//1
person.setName("long");
}
}
这样就可以。
典型应用
监听事件驱动程序设计
监听/监视某个对象状态的变化
发布者/订阅者