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

简介: 【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
  1. 观察者模式概述
  • 观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个模式中,有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它维护了一个观察者列表,并提供了用于添加、删除和通知观察者的方法。观察者是关注主题状态变化的对象,它们实现了一个更新接口,当主题状态改变时,主题会调用观察者的更新方法。
  • 例如,在一个简单的天气监测系统中,气象站是主题,它负责收集天气数据。而显示天气信息的各种设备(如手机应用、电子显示屏等)是观察者。当气象站更新天气数据(如温度、湿度等)时,所有的观察者设备都会收到通知并更新显示的天气信息。
  1. 事件背景与系统类比
  • 优衣库事件引发的市场反应类比
  • 在优衣库不使用新疆棉事件中,优衣库的这种行为可以看作是主题状态的改变。消费者群体、相关的供应商、竞争对手等可以看作是观察者。
  • 消费者(观察者)对优衣库的这种行为做出了反应,比如抵制购买优衣库的产品。从系统角度来看,这就相当于观察者接收到主题(优衣库品牌行为)状态改变的信号后,执行了相应的 “更新” 操作(改变购买行为)。
  • 供应商(观察者)可能会重新评估与优衣库的合作关系。这类似于在软件系统中,当主题状态改变时,观察者(供应商系统)根据新的情况更新自己的业务逻辑(如调整供货量或者终止合作)。
  • 在商业系统中的动态响应机制与观察者模式相似性
  • 商业系统中存在许多类似的动态响应场景,都可以用观察者模式来理解。例如,当一家公司(主题)发布了新产品或者改变了价格策略,其合作伙伴(如经销商、物流公司等观察者)和消费者(观察者)都会做出相应的反应。这些反应是基于对主题状态变化的感知,就像在观察者模式中,观察者对主题状态变化做出更新操作一样。
  1. 观察者模式的优势体现
  • 解耦主体和观察者
  • 在事件响应中,就像商业系统中的各个参与方不需要紧密耦合一样。以优衣库事件为例,消费者、供应商等各方的行为(观察者)和优衣库的品牌决策(主题)如果是硬编码在一起,那么系统将非常复杂且难以维护。而观察者模式使得这些观察者和主题之间是松耦合的关系。主题不需要知道观察者的具体细节,只需要在状态改变时通知它们。
  • 例如,在软件系统中,如果一个模块(主题)的内部逻辑发生变化,只要它通知观察者的接口不变,观察者(其他模块)就不需要进行大量的修改。这就好比在优衣库事件中,即使优衣库内部的品牌战略调整方式(主题内部逻辑)发生变化,消费者(观察者)的抵制行为逻辑(如通过社交媒体发声、改变购买习惯等)可以独立于优衣库的内部变化而存在,双方的关系通过一个简单的 “通知 - 响应” 机制(类似于观察者模式的通知和更新接口)来维持。
  • 易于扩展和维护
  • 当新的观察者加入时,在观察者模式下,只需要将新的观察者注册到主题中。就像在商业环境中,如果出现新的市场监督机构(新观察者)关注优衣库这类品牌的行为,它可以很容易地加入到这个 “观察系统” 中。
  • 从软件系统角度看,例如在一个电商系统中,新的促销活动提醒模块(新观察者)可以很容易地添加到关注商品价格变化(主题)的观察者列表中。对于维护来说,当主题或者观察者的业务逻辑发生变化时,只需要修改对应的主题或观察者内部的代码,而不会影响到其他部分的代码。这就好比在优衣库事件后,如果消费者的抵制方式发生变化(观察者逻辑改变)或者优衣库调整品牌形象修复策略(主题逻辑改变),这些修改可以相对独立地进行。
  1. 实际系统设计中的应用建议
  • 事件驱动架构借鉴
  • 在设计类似的具有动态响应需求的系统时,可以借鉴事件驱动架构,而观察者模式是事件驱动架构的一个基础模式。例如,在一个大型的电商平台中,可以将商品价格变化、库存变化等作为事件(主题状态变化),而订单系统、推荐系统等作为观察者。
  • 当商品价格下降(主题状态改变)时,订单系统可以根据新价格生成新的订单,推荐系统可以将该商品推荐给更多用户。通过这种方式,系统的各个部分可以根据事件的发生灵活地做出反应,就像在优衣库事件中,各个相关方根据品牌行为变化做出反应一样。
  • 消息队列的应用
  • 为了更好地实现观察者模式的通知机制,可以使用消息队列。消息队列可以作为主题和观察者之间的通信媒介,确保消息的可靠传递。例如,在一个金融系统中,当股票价格发生变化(主题状态改变)时,消息队列可以将价格变化消息发送给各个观察者(如交易系统、分析系统等)。
  • 这样可以避免因为网络波动或者系统繁忙等原因导致的通知丢失,同时也可以对消息进行异步处理,提高系统的整体性能和响应能力,就像在复杂的商业事件响应中,确保各个相关方能够及时、可靠地收到信息并做出响应。
相关文章
|
4月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
534 2
|
4月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
477 0
|
4月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
732 35
|
4月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
352 24
|
4月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
429 8
|
4月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
227 11
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
293 10
|
4月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
674 4
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
340 4
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
225 4