博客
关于我
报纸的配送方式:订阅发布模式
阅读量:495 次
发布时间:2019-03-07

本文共 1754 字,大约阅读时间需要 5 分钟。

观察者设计模式的实现与应用案例

问题背景:

在软件工程中,观察者模式是一种常见的设计模式,适用于一对多关系的场景。类似于报社与快递员的关系,报社功能模块(类似于被观察者)可以通知所有订阅报纸的客户(观察者),当有新闻发布时需要将新闻内容传达给所有订阅者。

预定义接口:

被观察者接口

interface News {    void addReader(Reader reader);    void removeReader(Reader reader);    void publishNews(String content);}**观察者接口**:```javainterface Reader {    void received(String content);}

实现类说明:

被观察者实现类

public class NewsPaper implements News {    private List
readerList = new LinkedList<>(); @Override public void addReader(Reader reader) { readerList.add(reader); } @Override public void removeReader(Reader reader) { if (readerList.contains(reader)) { readerList.remove(reader); } } @Override public void publishNews(String content) { for (Reader reader : readerList) { reader.received(content); } }}

观察者实现类

public class StudentReader implements Reader {    private String name;    public StudentReader(String name) {        this.name = name;    }    @Override    public void received(String content) {        System.out.println("[" + name + "]---->" + content);    }}

实验验证:

public static void main(String[] args) {    StudentReader studentReader1 = new StudentReader("史珍香1");    StudentReader studentReader2 = new StudentReader("史珍香2");    StudentReader studentReader3 = new StudentReader("史珍香3");    NewsPaper newsPaper = new NewsPaper();    newsPaper.addReader(studentReader1);    newsPaper.addReader(studentReader2);    newsPaper.addReader(studentReader3);    newsPaper.publishNews("二狗子呼叫土豆~");}

示例输出:

[史珍香1]---->二狗子呼叫土豆~[史珍香2]---->二狗子呼叫土豆~[史珍香3]---->二狗子呼叫土豆~

设计优点:

  • 高效性:发布新闻一次,所有订阅者自动接收
  • 可扩展性:支持任意数量的订阅者
  • 松耦合:发布者与订阅者无需直接关联
  • 事件驱动:通过发布事件,触发订阅者的相应处理
  • 以上设计通过展示观察者模式的核心实现,展示了其在实际项目中的可行性与优势,同时通过代码示例验证了理论的正确性。

    转载地址:http://befjz.baihongyu.com/

    你可能感兴趣的文章
    python 虚拟环境 virtualenv virtualenvwrapper的使用方法、命令
    查看>>
    ubuntu无法安装vscode(visual studio code)如何卸载snap?
    查看>>
    Unity3D的InputField输入框控件按下Tab键光标自动切换
    查看>>
    静态数组类的封装(泛型)
    查看>>
    【BUG修复】网络映射/端口穿透/视频组网服务EasyNTS上云网关代理前端数据无法解析问题
    查看>>
    CHIP-seq流程学习笔记(4)-call peak 软件macs2
    查看>>
    操作记录-2021-03-15: sunxiaoyu_project
    查看>>
    Android DEX加固方案与原理
    查看>>
    Android Retrofit2.0 上传单张图片和多张图片
    查看>>
    android 常用的代码
    查看>>
    Eclipse的基本使用配置
    查看>>
    tomcat服务器
    查看>>
    vue 导出Excel乱码问题解决方案
    查看>>
    eggjs validate no function 解决方案
    查看>>
    eggjs Unknown column ‘createdAt‘ in ‘field list‘ 报错解决方案
    查看>>
    Permission denied 解决方案
    查看>>
    iOS_图片添加水印_文本倾斜
    查看>>
    iOS_Runtime3_动态添加方法
    查看>>
    iOS_Runtime4_动态添加属性
    查看>>
    Docker配置文件
    查看>>