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();// 被察看发送了告诉音讯}
结尾:生在红旗下,长在春风里