描述
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。对象行为型模式
主要角色
- Subject: 目标
- ConcreteSubject: 具体目标
- Observer: 观察者
- ConcreteObserver: 具体观察者
代码实现
观察者public abstract class AbstractAnchor {abstract void addFan(AbstractFan fan);}
public class LshadAnchor extends AbstractAnchor {private List<AbstractFan> fans = new ArrayList<>();public void startBroadcast() {System.out.println("开播了 通知粉丝");for (AbstractFan fan : fans) {fan.notificationCallback();}}public void downcast() {System.out.println("下播了 通知粉丝");for (AbstractFan fan : fans) {fan.notificationCallback();}}@Overridevoid addFan(AbstractFan fan) {fans.add(fan);}}
public abstract class AbstractFan {abstract void subscribeToTheHost(AbstractAnchor abstractAnchor);abstract void notificationCallback();}
public class HumanFans extends AbstractFan{@Overridevoid subscribeToTheHost(AbstractAnchor abstractAnchor) {abstractAnchor.addFan(this);}@Overridevoid notificationCallback() {System.out.println("呸...");}}
public class RobotFans extends AbstractFan{@Overridevoid subscribeToTheHost(AbstractAnchor abstractAnchor) {abstractAnchor.addFan(this);}@Overridevoid notificationCallback() {System.out.println("来了臭弟弟");}}
public class ObserverTest {public static void main(String[] args) {LshadAnchor lshadAnchor = new LshadAnchor();HumanFans humanFans = new HumanFans();RobotFans robotFans = new RobotFans();humanFans.subscribeToTheHost(lshadAnchor);robotFans.subscribeToTheHost(lshadAnchor);lshadAnchor.startBroadcast();lshadAnchor.downcast();}}//测试结果开播了 通知粉丝呸...来了臭弟弟下播了 通知粉丝呸...来了臭弟弟
使用场景
什么场景用到?
- Spring事件机制如何实现?
- Vue的双向绑定核心响应式编程核心思想
- ……
