观察者模式

观察者模式

观察者模式(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();
    }
}
相关推荐
泉城老铁5 分钟前
springboot实现对接poi 导出excel折线图
java·spring boot·后端
金銀銅鐵22 分钟前
[Java] 如何自动生成简单的 Mermaid 类图
java·后端
纵横八荒36 分钟前
Java基础加强13-集合框架、Stream流
java·开发语言
稚辉君.MCA_P8_Java1 小时前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes
乄bluefox1 小时前
保姆级docker部署nacos集群
java·docker·容器
欣然~1 小时前
百度地图收藏地址提取与格式转换工具 说明文档
java·开发语言·dubbo
William_cl1 小时前
C# MVC 修复DataTable时间排序以及中英文系统的时间筛选问题
开发语言·c#·mvc
running thunderbolt1 小时前
项目---网络通信组件JsonRpc
linux·服务器·c语言·开发语言·网络·c++·性能优化
玩毛线的包子1 小时前
Android Gradle学习(十三)- 配置读取和文件写入
java
数据智能老司机1 小时前
数据工程设计模式——实时摄取与处理
大数据·设计模式·架构