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