设计模式——观察者模式Observer

Q:观察者模式属于哪一类设计模式

A:观察者模式属于行为学模式

Q:什么是观察者模式

A:当一个对象的状态发生改变时,所有依赖它的对象都得到通知,并自动更新

观察者模式解析:报纸类维护了一个订阅者数组,我们可以通过报纸类遍历订阅者数组来通知所有订阅者

订阅者类

java 复制代码
public interface Subscriber { void update(String message); }

订阅者实现类

java 复制代码
public class SubscriberImpl implements Subscriber {
    private String name;

    @Override
    public void update(String message) {
        System.out.println(name + "---接收到消息:" + message);
    }
}

报纸类

java 复制代码
public interface NewsPaper {
    void addSubscriber(Subscriber subscriber);//添加订阅者
    void removeSubscriber(Subscriber subscriber);//移除订阅者
    void notifySubscriber(String message);//通知订阅者
}

报纸实现类

java 复制代码
public class NewsPaperImpl implements NewsPaper {
    private List<Subscriber> subscribers = new ArrayList<>();

    @Override
    public void addSubscriber(Subscriber subscriber) { subscribers.add(subscriber); }

    @Override
    public void removeSubscriber(Subscriber subscriber) { subscribers.remove(subscriber); }

    @Override
    public void notifySubscriber(String message) {
        for (Subscriber s : subscribers) {
            s.update(message);
        }
    }
}

演示类

java 复制代码
public class Demo {
    public static void main(String[] args) {
        NewsPaperImpl newsPaper = new NewsPaperImpl();
        SubscriberImpl subscriber1 = new SubscriberImpl("李老头");
        SubscriberImpl subscriber2 = new SubscriberImpl("王奶奶");

        newsPaper.addSubscriber(subscriber1);
        newsPaper.addSubscriber(subscriber2);

        newsPaper.notifySubscriber("今天的报纸收到了!");

        newsPaper.removeSubscriber(subscriber1);

        newsPaper.notifySubscriber("明天的报纸还是这个点到!");
    }
}

演示结果

相关推荐
是2的10次方啊9 小时前
设计模式与生活①:你的脸,为什么不能有第二个?
设计模式
高晶11 小时前
ARM 嵌入式 Linux 命令系统 BusyBox 实战指南
linux·设计模式·程序员
高晶11 小时前
语音合成与变声技术十大业务场景落地实战:从电商直播到规模化生产
设计模式·程序员
博风14 小时前
19、设计模式应用举例:桥接模式:制作电视节目
设计模式·桥接模式
知守观14 小时前
从 4 套 PDF 库的混战,聊聊老项目的依赖管理与“静默失败”
java·后端·设计模式
geovindu1 天前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
SENKS_DIGITAL2 天前
金属加工遇上数字化:通快展厅里的工业蜕变-森克思科技
科技·设计模式·展厅设计·展馆设计·科技展厅设计·展览设计·企业展厅设计
flower9803232 天前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构
zzu123zsw3 天前
业务拆分后的治理深水区:解构企业级微服务六大核心设计模式与高可用落真实践
微服务·设计模式·架构·高可用·微服务架构设计
牧瀬クリスだ3 天前
观察者模式:一个对象变化,一群对象自动响应
java·观察者模式·设计模式