Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应

简介: 【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
  1. 观察者模式概述
  • 观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个模式中,有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它维护了一个观察者列表,并提供了用于添加、删除和通知观察者的方法。观察者是关注主题状态变化的对象,它们实现了一个更新接口,当主题状态改变时,主题会调用观察者的更新方法。
  • 例如,在一个简单的天气监测系统中,气象站是主题,它负责收集天气数据。而显示天气信息的各种设备(如手机应用、电子显示屏等)是观察者。当气象站更新天气数据(如温度、湿度等)时,所有的观察者设备都会收到通知并更新显示的天气信息。
  1. 事件背景与系统类比
  • 优衣库事件引发的市场反应类比
  • 在优衣库不使用新疆棉事件中,优衣库的这种行为可以看作是主题状态的改变。消费者群体、相关的供应商、竞争对手等可以看作是观察者。
  • 消费者(观察者)对优衣库的这种行为做出了反应,比如抵制购买优衣库的产品。从系统角度来看,这就相当于观察者接收到主题(优衣库品牌行为)状态改变的信号后,执行了相应的 “更新” 操作(改变购买行为)。
  • 供应商(观察者)可能会重新评估与优衣库的合作关系。这类似于在软件系统中,当主题状态改变时,观察者(供应商系统)根据新的情况更新自己的业务逻辑(如调整供货量或者终止合作)。
  • 在商业系统中的动态响应机制与观察者模式相似性
  • 商业系统中存在许多类似的动态响应场景,都可以用观察者模式来理解。例如,当一家公司(主题)发布了新产品或者改变了价格策略,其合作伙伴(如经销商、物流公司等观察者)和消费者(观察者)都会做出相应的反应。这些反应是基于对主题状态变化的感知,就像在观察者模式中,观察者对主题状态变化做出更新操作一样。
  1. 观察者模式的优势体现
  • 解耦主体和观察者
  • 在事件响应中,就像商业系统中的各个参与方不需要紧密耦合一样。以优衣库事件为例,消费者、供应商等各方的行为(观察者)和优衣库的品牌决策(主题)如果是硬编码在一起,那么系统将非常复杂且难以维护。而观察者模式使得这些观察者和主题之间是松耦合的关系。主题不需要知道观察者的具体细节,只需要在状态改变时通知它们。
  • 例如,在软件系统中,如果一个模块(主题)的内部逻辑发生变化,只要它通知观察者的接口不变,观察者(其他模块)就不需要进行大量的修改。这就好比在优衣库事件中,即使优衣库内部的品牌战略调整方式(主题内部逻辑)发生变化,消费者(观察者)的抵制行为逻辑(如通过社交媒体发声、改变购买习惯等)可以独立于优衣库的内部变化而存在,双方的关系通过一个简单的 “通知 - 响应” 机制(类似于观察者模式的通知和更新接口)来维持。
  • 易于扩展和维护
  • 当新的观察者加入时,在观察者模式下,只需要将新的观察者注册到主题中。就像在商业环境中,如果出现新的市场监督机构(新观察者)关注优衣库这类品牌的行为,它可以很容易地加入到这个 “观察系统” 中。
  • 从软件系统角度看,例如在一个电商系统中,新的促销活动提醒模块(新观察者)可以很容易地添加到关注商品价格变化(主题)的观察者列表中。对于维护来说,当主题或者观察者的业务逻辑发生变化时,只需要修改对应的主题或观察者内部的代码,而不会影响到其他部分的代码。这就好比在优衣库事件后,如果消费者的抵制方式发生变化(观察者逻辑改变)或者优衣库调整品牌形象修复策略(主题逻辑改变),这些修改可以相对独立地进行。
  1. 实际系统设计中的应用建议
  • 事件驱动架构借鉴
  • 在设计类似的具有动态响应需求的系统时,可以借鉴事件驱动架构,而观察者模式是事件驱动架构的一个基础模式。例如,在一个大型的电商平台中,可以将商品价格变化、库存变化等作为事件(主题状态变化),而订单系统、推荐系统等作为观察者。
  • 当商品价格下降(主题状态改变)时,订单系统可以根据新价格生成新的订单,推荐系统可以将该商品推荐给更多用户。通过这种方式,系统的各个部分可以根据事件的发生灵活地做出反应,就像在优衣库事件中,各个相关方根据品牌行为变化做出反应一样。
  • 消息队列的应用
  • 为了更好地实现观察者模式的通知机制,可以使用消息队列。消息队列可以作为主题和观察者之间的通信媒介,确保消息的可靠传递。例如,在一个金融系统中,当股票价格发生变化(主题状态改变)时,消息队列可以将价格变化消息发送给各个观察者(如交易系统、分析系统等)。
  • 这样可以避免因为网络波动或者系统繁忙等原因导致的通知丢失,同时也可以对消息进行异步处理,提高系统的整体性能和响应能力,就像在复杂的商业事件响应中,确保各个相关方能够及时、可靠地收到信息并做出响应。
相关文章
|
18天前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
166 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
3月前
|
设计模式 存储 供应链
前端必须掌握的设计模式——观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,实现了一种订阅机制。它包含两个角色:**观察者**(订阅消息、接收通知并执行操作)和**被观察者**(维护观察者列表、发送通知)。两者通过一对多的关系实现解耦,当被观察者状态改变时,会通知所有订阅的观察者。例如,商店老板作为被观察者,记录客户的需求并在商品到货时通知他们。前端应用中,如DOM事件注册、MutationObserver等也体现了这一模式。
|
21天前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
91 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
21天前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
83 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
20天前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
67 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
24天前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
84 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
2天前
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
14 2
|
18天前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
64 5
|
2月前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
65 6
|
2月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
62 7