Java 23中设计模式之观察者模式
一:定义
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己
- Subject(被观察的对象接口):规定ConcreteSubject的统一接口;每一个Subject被观察者可以有多个观察者Observer
- ConcreteSubject(具体被观察者对象):维护队所有具体观察者的引用的列表,一旦状态发生变化时会发送通知给所有注册的观察者
- Observer(观察者接口):规定ConcreteObserver的统一接口,定义一个update()方法,在被观察对象状态改变是会被调用
- ConcreteObserver(具体观察者):维护一个对ConcreteSubject的引用;特定状态与ConcreteSubject同步; 实现Observer接口,update()方法的作用:一旦检测到Subject有变动,就更新信息
二:观察者模式的实现
1.定义观察者主题对象(被观察者)
/**
* 观察者主题对象,即被观察者
*/
public interface Subject {
/**
* 订阅操作
*/
void attach(Observer observer);
/**
* 取消订阅操作
*/
void detach(Observer observer);
/**
* 通知变动
*/
void notifyChanged();
}
2.定义观察者
/**
* 观察者
*/
public interface Observer {
/**
* 接收变动通知
*/
void update();
}
3.被观察的实现类RealSubject具体实现类
public static class RealSubject implements Subject {
private List<Observer> observerList = new ArrayList<>();
@Override
public void attach(Observer observer) {
observerList.add(observer);
}
@Override
public void detach(Observer observer) {
observerList.remove(observer);
}
@Override
public void notifyChanged() {
for (Observer observer : observerList) {
observer.update();
}
}
4.观察者的具体实现类RealObject
public static class RealObject implements Observer {
@Override
public void update() {
System.out.println("接收到了通知");//观察者接收到消息
}
}
5.创建被观察者对象,和观察者对象,实现订阅
public static void main(String[] args) {
Subject subject = new RealSubject();//被观察者对象
Observer observer = new RealObject();//观察者对象
subject.attach(observer);//被观察者订阅了观察者
subject.notifyChanged();//被观察发送了通知消息
}
结尾:生在红旗下,长在春风里
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。