观察者模式

观察者模式

观察者模式(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();
    }
}
相关推荐
benjiangliu3 分钟前
恩培趣味计算机视觉-01-conda环境和Python库
开发语言·python·conda
有同事要进步5 分钟前
Leecode第68题:x的平方根
java·数据结构·算法
摇滚侠7 分钟前
使用 VSCode 开发 Java 经验分享
java·经验分享·vscode
我喜欢就喜欢8 分钟前
DeepSeek Harness 开源贡献手记:从零到合入主线
开发语言·人工智能
吹什么轩11 分钟前
linux系统复习:进程优先级与O(1)调度
java·linux·算法
坐看风云变幻13 分钟前
《嵌入式工程师的软硬件修仙之路》第 2 期|C 语言筑基:指针与内存模型
c语言·开发语言
古法老登瞎折腾18 分钟前
大数据智能运维实战(六):任务一直在等——排查调度队列与执行资源
java·大数据·运维·spring ai·mcp
开开心心就好22 分钟前
安卓PDF处理工具,免费无广告零弹窗
android·服务器·开发语言·算法·pdf·ocr
Pniubi23 分钟前
HashMap扩容全流程
java·开发语言·数据结构
白杨尚青2 小时前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定