observer模式
它的作用是当一个对象的状态发生变化时,能够自动通知其他的关联的对象。
自动刷新对象状态。
观察者模式角色和职责
Subject 被观察者
被观察的对象,当需要被观察的状态发生变化时,需要通知队列中所有的观察者对象。
subject需要维护(添加,删除,通知)一个观察者对象的列表。
Concreate subject
被观察者的具体实现。
Observer 观察者
接口或者抽象类,当suject的状态发生改变时,observer对象将通过一个callback函数得到通知
Concreteobserver
观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。

其中里面有一个方法很重要
notifyObservers()
当对象发生改变,则通知其所有的观察者。
观察者模式应用
侦听事件驱动程序中外部事件。
监听某个对象的状态变化
发布/订阅,某个新的消息出现,通知邮件列表的订阅者。
代码实现
1.被观察者
import java.util.Observable;
/**
* 要成为被观察者必须继承observable,可以被观察。
*/
public class Person extends Observable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
//告诉观察者你改变了
this.setChanged();
//当name发生改变的时候要通知观察者
this.notifyObservers();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
//告诉观察者你改变了
this.setChanged();
//当age发生改变的时候要通知观察者
this.notifyObservers();
}
}
2.观察者
import java.util.Observable;
import java.util.Observer;
/**
* 观察者,实现observer
*/
public class MyObserver implements Observer {
//callback
//当我的name,age发生变化的时候就会自动调用这些方法
@Override
public void update(Observable o, Object arg) {
System.out.println("对象发生变化");
}
}
3.主函数
public class Main {
public static void main(String[] args) {
Person person=new Person();
//注册观察者
person.addObserver(new MyObserver());
//删除观察者
// person.deleteObserver();
//删除所有的观察者
// person.deleteObservers();
person.setName("李四");
person.setAge(10);
}
}
本文深入讲解了观察者模式,一种当对象状态改变时自动通知所有依赖对象的设计模式。通过实例展示了如何使用Java实现观察者模式,包括被观察者、观察者及其实现,以及关键的notifyObservers()方法。

565

被折叠的 条评论
为什么被折叠?



