观察者模式

观察者模式

观察者模式(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();
    }
}
相关推荐
linx2952 分钟前
第七章 · 标准库容器、算法与 ranges
c语言·开发语言·数据结构·c++·算法
青春易逝丶3 分钟前
Maven
java·maven
吠品8 分钟前
纯HTML+ECharts构建交互式数据看板:实现思路与踩坑记录
java·服务器·数据库
峥嵘life16 分钟前
2026华为AI码道 CodeArts 使用分享:Windows端 + 服务器CLI 实战总结
android·大数据·开发语言·python
x秀x23 分钟前
sam3新手使用教程
开发语言·python
Java后端的Ai之路24 分钟前
大模型LLM评估完全指南
开发语言·人工智能·python·llm·评估
盖伦发发26 分钟前
Redis 核心教学: 数据结构, 缓存设计, 分布式锁
java·redis·后端·软件工程
卷毛的技术笔记27 分钟前
RocketMQ事务消息:我把分布式事务这层窗户纸捅破了
java·分布式·后端·java-rocketmq
Brilliantwxx36 分钟前
【STM32】 从HAL库源码深度解析I2C(源码解析+面试题)
开发语言·stm32·单片机·嵌入式硬件·架构
yxlalm40 分钟前
零基础快速上手Trae创建Java项目
java·人工智能