概念
- 定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。对象行为型模式

主要角色
- Subject: 目标
- ConcreteSubject: 具体目标
- Observer: 观察者
- ConcreteObserver: 具体观察者
/** * Subject: 目标 */public abstract class AbstractTikToker { //添加粉丝 abstract void addFans(AbstractFans fans); //通知粉丝 abstract void notifyFans(String msg);}
/** * ConcreteSubject: 具体目标 */public class MMTikToker extends AbstractTikToker{ //1、观察者的核心1 List<AbstractFans> fansList = new ArrayList<>(); void startSell() { System.out.println("雷丰阳... 开始卖货...源码设计课"); notifyFans("我开始卖东西了,是源码设计课,只要666"); } void endSell() { System.out.println("雷丰阳... 结束卖货...源码设计课"); notifyFans("课已经卖完了,记得五星好评..."); } @Override void addFans(AbstractFans fans) { fansList.add(fans); } //通知所有观察者 @Override void notifyFans(String msg) { //1、所有粉丝拿来通知 for (AbstractFans fans : fansList) { fans.acceptMsg(msg); } }}
/** * Observer: 观察者 */public abstract class AbstractFans { List<AbstractTikToker> tikTokers;//双向观察 abstract void acceptMsg(String msg); void follow(AbstractTikToker tikToker){ //主播增粉了 tikToker.addFans(this);// for (AbstractTikToker toker : tikTokers) {//// } };}
/** * ConcreteObserver: 具体观察者 */public class HumanFans extends AbstractFans { @Override void acceptMsg(String msg) { System.out.println("主播说:"+msg); }}
/** * ConcreteObserver: 具体观察者 */public class RobotFans extends AbstractFans { @Override void acceptMsg(String msg) { System.out.println("呸...."); }}
应用场景
- Spring事件机制如何实现?
- Vue的双向绑定核心
- 响应式编程核心思想