观察者模式

观察者模式

观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

案例

粉丝关注主播,主播开始直播时会向所以粉丝发送消息

主播:

java 复制代码
public abstract class AbstractTikTok {
    List<AbstractFan> list = new ArrayList<>();

    abstract void notify(String msg);

    abstract void addFans(AbstractFan fan);
}
java 复制代码
public class MMTikTok extends AbstractTikTok{
    public void sell(){
        System.out.println("开始卖货。。");
        notify("直播开始啦。。");
    }

    @Override
    void notify(String msg) {
        list.forEach(fan -> fan.acceptMsg(msg));
    }

    @Override
    void addFans(AbstractFan fan) {
        list.add(fan);
    }
}

粉丝:

java 复制代码
public abstract class AbstractFan {
    abstract void acceptMsg(String msg);
    abstract void follow(AbstractTikTok tikTok);
}
java 复制代码
public class ManFan extends AbstractFan{

    @Override
    void acceptMsg(String msg) {
        System.out.println("监听到消息:"+msg);
    }

    @Override
    void follow(AbstractTikTok tikTok) {
        tikTok.addFans(this);
    }

}

测试:

java 复制代码
public class Main {
    public static void main(String[] args) {
        MMTikTok mmTikTok = new MMTikTok();
        ManFan fan1 = new ManFan();
        ManFan fan2 = new ManFan();

        fan1.follow(mmTikTok);
        fan2.follow(mmTikTok);

        mmTikTok.sell();
    }
}
相关推荐
Json____3 分钟前
最近我用springBoot开发了一个二手交易管理系统,分享一下实现方式~
java·spring boot·后端
YuanlongWang3 分钟前
C#基础——GC(垃圾回收)的工作流程与优化策略
java·jvm·c#
爱吃生蚝的于勒3 分钟前
【Linux】深入理解进程(一)
java·linux·运维·服务器·数据结构·c++·蓝桥杯
毅炼5 分钟前
常见排序算法
java·算法·排序算法
自由会客室11 分钟前
在 Ubuntu24.04 上安装 JDK 21(Java 21)
java·开发语言
Code_Geo16 分钟前
agent设计模式:第二章节—路由
网络·设计模式·路由
喜欢读源码的小白20 分钟前
SpringBoot的启动流程原理——小白的魔法引擎探秘
java·开发语言·spring boot·springboot启动原理
白露与泡影27 分钟前
BAT 大厂 java高频面试题汇总:JVM+Spring+ 分布式 +tomcat+MyBatis
java·jvm·spring
Han.miracle29 分钟前
数据结构——排序的学习(一)
java·数据结构·学习·算法·排序算法
太过平凡的小蚂蚁38 分钟前
解耦的艺术:深入理解设计模式之命令模式
设计模式·命令模式