观察者模式

观察者模式

观察者模式(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();
    }
}
相关推荐
dlraba8025 分钟前
用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
开发语言·matlab
lssjzmn14 分钟前
会话管理巅峰对决:Spring Web中Cookie-Session、JWT、Spring Session + Redis深度秘籍
java·spring·架构
聪明墨菲特19 分钟前
HttpClient工具类优化实践:提升性能与可维护性
后端·设计模式
Java中文社群20 分钟前
面试官:如何提升项目并发性能?
java·后端·面试
繁花与尘埃20 分钟前
Java流程控制04——if选择结构(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
java·笔记·学习
Seven9722 分钟前
hive 中 group by 和 distinct 孰优孰劣?
java
潼心1412o23 分钟前
C语言(长期更新)第14讲:指针详解(四)
c语言·开发语言
怀旧,24 分钟前
【C++】16. set和map
开发语言·c++
heyCHEEMS31 分钟前
路径总和 Ⅱ Java
java·开发语言·深度优先
YF云飞32 分钟前
Dubbo分布式服务框架全解析
java·dubbo