当前位置: 首页 > wzjs >正文

网站开发中网页上传丰台路网站建设

网站开发中网页上传,丰台路网站建设,网站设计开发平台,无线网络管理系统发布-订阅模式应用场景及示例说明 发布-订阅模式通过事件中心解耦组件间的直接依赖,适用于需要灵活、动态通信的场景。以下是典型应用场景及具体示例: 1. 用户界面(UI)组件通信 场景:多个独立组件需要响应同一事件&a…

发布-订阅模式应用场景及示例说明

发布-订阅模式通过事件中心解耦组件间的直接依赖,适用于需要灵活、动态通信的场景。以下是典型应用场景及具体示例:


1. 用户界面(UI)组件通信

场景:多个独立组件需要响应同一事件(如用户登录、数据更新)。
示例

  • 用户登录成功后的全局更新
    登录组件发布事件,其他组件(如导航栏、购物车、个人中心)订阅该事件并更新状态。
    // 登录成功后发布事件
    eventEmitter.emit("userLogin", { username: "Alice" });// 导航栏组件订阅
    eventEmitter.on("userLogin", (user) => {updateNavBar(user);
    });// 购物车组件订阅
    eventEmitter.on("userLogin", (user) => {loadCart(user.id);
    });
    

2. 模块解耦

场景:跨模块通信,避免直接依赖。
示例

  • 数据层与视图层解耦
    数据模块在数据变化时发布事件,视图模块订阅事件并重新渲染,无需直接调用渲染方法。
    // 数据模块(发布者)
    function updateData(newData) {dataCache = newData;eventEmitter.emit("dataChanged", newData);
    }// 视图模块(订阅者)
    eventEmitter.on("dataChanged", (data) => {renderView(data);
    });
    

3. 异步操作协调

场景:多个异步任务完成后触发后续操作。
示例

  • 并行异步任务全部完成后通知
    多个 API 请求并行执行,所有请求完成后触发事件。
    let completedTasks = 0;
    const totalTasks = 3;// 每个异步任务完成后触发事件
    fetchUser().then(() => {eventEmitter.emit("taskComplete");
    });
    fetchOrders().then(() => {eventEmitter.emit("taskComplete");
    });
    fetchProducts().then(() => {eventEmitter.emit("taskComplete");
    });// 监听所有任务完成
    eventEmitter.on("taskComplete", () => {completedTasks++;if (completedTasks === totalTasks) {console.log("所有任务完成");}
    });
    

4. 插件系统或扩展机制

场景:允许第三方插件监听核心系统的事件,扩展功能。
示例

  • 编辑器插件机制
    编辑器核心发布事件(如内容修改、保存),插件订阅事件实现自定义功能(如自动保存、语法检查)。
    // 编辑器核心(发布者)
    class Editor {insertText(text) {// 插入文本逻辑eventEmitter.emit("contentChanged", text);}
    }// 自动保存插件(订阅者)
    eventEmitter.on("contentChanged", (text) => {autoSaveToLocal(text);
    });// 语法检查插件(订阅者)
    eventEmitter.on("contentChanged", (text) => {checkGrammar(text);
    });
    

5. 微服务架构中的事件驱动

场景:服务间通过事件通信,避免直接 API 调用。
示例

  • 订单创建后通知其他服务
    订单服务发布订单创建事件,库存服务、支付服务、日志服务订阅事件并执行操作。
    // 订单服务(发布者)
    orderService.createOrder(orderData).then(() => {eventEmitter.emit("orderCreated", orderData);
    });// 库存服务(订阅者)
    eventEmitter.on("orderCreated", (order) => {inventoryService.updateStock(order.items);
    });// 支付服务(订阅者)
    eventEmitter.on("orderCreated", (order) => {paymentService.processPayment(order.total);
    });
    

6. 游戏开发中的事件驱动逻辑

场景:游戏对象的状态变化触发多系统响应。
示例

  • 玩家得分变化更新 UI 和成就系统
    得分管理器发布得分变化事件,UI 组件和成就系统订阅事件。
    // 得分管理器(发布者)
    class ScoreManager {addScore(points) {this.score += points;eventEmitter.emit("scoreUpdated", this.score);}
    }// UI 组件(订阅者)
    eventEmitter.on("scoreUpdated", (score) => {updateScoreDisplay(score);
    });// 成就系统(订阅者)
    eventEmitter.on("scoreUpdated", (score) => {if (score >= 1000) unlockAchievement("High Score");
    });
    

7. 浏览器事件机制

场景:DOM 事件(如点击、滚动)本质上是发布-订阅模式。
示例

  • 按钮点击触发多个回调
    点击按钮后执行多个独立操作(如提交表单、记录日志、关闭弹窗)。
    // 发布者:浏览器内置的事件触发机制
    document.getElementById("btn").addEventListener("click", () => {// 隐式发布 "click" 事件
    });// 订阅者 1:表单提交
    document.getElementById("btn").addEventListener("click", submitForm);// 订阅者 2:日志记录
    document.getElementById("btn").addEventListener("click", logClick);
    

总结

适用场景共性

  • 松耦合需求:组件/模块间需通信但避免直接依赖。
  • 动态扩展性:需灵活添加或移除功能响应。
  • 一对多或多对多通信:一个事件触发多个独立操作。

不适用场景

  • 简单的一对一通信(直接调用更高效)。
  • 需要严格顺序控制的操作(事件触发顺序不可控)。

通过发布-订阅模式,可以显著提升代码的可维护性和扩展性,尤其适合复杂系统中的事件驱动架构设计。


文章转载自:

http://7h7fpx4p.kqcqr.cn
http://a5Zi9a2f.kqcqr.cn
http://iJIzRwYj.kqcqr.cn
http://WH3Ep6ig.kqcqr.cn
http://gq4iLNno.kqcqr.cn
http://daCQ0Ndm.kqcqr.cn
http://yEeEC2oJ.kqcqr.cn
http://rSRFdBzT.kqcqr.cn
http://xGFlXqEk.kqcqr.cn
http://uWHDW6Aw.kqcqr.cn
http://7nCPjQZB.kqcqr.cn
http://BBzrqOh0.kqcqr.cn
http://yGnDlAXe.kqcqr.cn
http://hRs2OY9s.kqcqr.cn
http://9lvJlj7A.kqcqr.cn
http://wVphlxea.kqcqr.cn
http://36qBoXY7.kqcqr.cn
http://7ddigoRL.kqcqr.cn
http://v8qdLMAZ.kqcqr.cn
http://lsdYnCOO.kqcqr.cn
http://iqHps0Du.kqcqr.cn
http://jUF4Du4t.kqcqr.cn
http://YcV3eG9u.kqcqr.cn
http://2Yt9mZsy.kqcqr.cn
http://9WZ7CsBd.kqcqr.cn
http://nhy48Fm8.kqcqr.cn
http://QKiDB1NJ.kqcqr.cn
http://Flmdiiw4.kqcqr.cn
http://m8EoxOSw.kqcqr.cn
http://hrAkHPts.kqcqr.cn
http://www.dtcms.com/wzjs/660609.html

相关文章:

  • 网站如何建数据库安徽住房和城乡建设厅注册网站
  • 电力公司在哪个网站做推广最好做养生的网站多吗
  • 青岛响应式网站开发哪家网站推广做的好
  • 常州免费企业网站建设什么是网络营销产生的基础
  • 网站实现用户登录重庆公司网站建设价格
  • 24小时学会网站建设东莞微网站制作
  • 顺义公司建站多少钱wordpress有商城吗
  • wordpress如何实现支付功天津百度首页优化排名
  • 用dede做的网站一级建造师价格最新行情
  • 网站赢利招商网站建设定做
  • 专门做金融的招聘网站什么是网络营销含义
  • 怎么重启网站服务器dw主页制作
  • 提供网站哪家好教务管理系统学生登录入口
  • 游戏设计师网站网站建设的大功效
  • 制作企业网站页面htmlwordpress相册管理系统
  • 网站做的最好的动画制作软件免费版
  • 香河县住房和城乡建设部网站设计ui是什么意思
  • 专业制作彩铃网站企业文化墙创意设计图
  • 夜间正能量网站入口免费下载h5用什么网站来做
  • 集团公司做网站烟台做网站谁家好
  • 网站主题切换甜蜜定制app
  • 哪个网站做招聘海报比较好wordpress 获取所有菜单
  • 网站的商桥怎么做门户网站模板下载
  • 58同城类似的网站开发济南优化网络营销
  • 重庆制作网站培训机构西樵网站制作
  • 常州建设局建筑职称网站wordpress 更换数据库
  • 工业皮带怎么做免费的网站企业网站建设人员分析
  • 泉州住房与城乡建设网站网站安全防护措施
  • 代码需求网站网站是自己做还是让别人仿
  • 源码屋整站源码如何更好的建设和维护网站