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

简介: 【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
  1. 观察者模式概述
  • 观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个模式中,有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它维护了一个观察者列表,并提供了用于添加、删除和通知观察者的方法。观察者是关注主题状态变化的对象,它们实现了一个更新接口,当主题状态改变时,主题会调用观察者的更新方法。
  • 例如,在一个简单的天气监测系统中,气象站是主题,它负责收集天气数据。而显示天气信息的各种设备(如手机应用、电子显示屏等)是观察者。当气象站更新天气数据(如温度、湿度等)时,所有的观察者设备都会收到通知并更新显示的天气信息。
  1. 事件背景与系统类比
  • 优衣库事件引发的市场反应类比
  • 在优衣库不使用新疆棉事件中,优衣库的这种行为可以看作是主题状态的改变。消费者群体、相关的供应商、竞争对手等可以看作是观察者。
  • 消费者(观察者)对优衣库的这种行为做出了反应,比如抵制购买优衣库的产品。从系统角度来看,这就相当于观察者接收到主题(优衣库品牌行为)状态改变的信号后,执行了相应的 “更新” 操作(改变购买行为)。
  • 供应商(观察者)可能会重新评估与优衣库的合作关系。这类似于在软件系统中,当主题状态改变时,观察者(供应商系统)根据新的情况更新自己的业务逻辑(如调整供货量或者终止合作)。
  • 在商业系统中的动态响应机制与观察者模式相似性
  • 商业系统中存在许多类似的动态响应场景,都可以用观察者模式来理解。例如,当一家公司(主题)发布了新产品或者改变了价格策略,其合作伙伴(如经销商、物流公司等观察者)和消费者(观察者)都会做出相应的反应。这些反应是基于对主题状态变化的感知,就像在观察者模式中,观察者对主题状态变化做出更新操作一样。
  1. 观察者模式的优势体现
  • 解耦主体和观察者
  • 在事件响应中,就像商业系统中的各个参与方不需要紧密耦合一样。以优衣库事件为例,消费者、供应商等各方的行为(观察者)和优衣库的品牌决策(主题)如果是硬编码在一起,那么系统将非常复杂且难以维护。而观察者模式使得这些观察者和主题之间是松耦合的关系。主题不需要知道观察者的具体细节,只需要在状态改变时通知它们。
  • 例如,在软件系统中,如果一个模块(主题)的内部逻辑发生变化,只要它通知观察者的接口不变,观察者(其他模块)就不需要进行大量的修改。这就好比在优衣库事件中,即使优衣库内部的品牌战略调整方式(主题内部逻辑)发生变化,消费者(观察者)的抵制行为逻辑(如通过社交媒体发声、改变购买习惯等)可以独立于优衣库的内部变化而存在,双方的关系通过一个简单的 “通知 - 响应” 机制(类似于观察者模式的通知和更新接口)来维持。
  • 易于扩展和维护
  • 当新的观察者加入时,在观察者模式下,只需要将新的观察者注册到主题中。就像在商业环境中,如果出现新的市场监督机构(新观察者)关注优衣库这类品牌的行为,它可以很容易地加入到这个 “观察系统” 中。
  • 从软件系统角度看,例如在一个电商系统中,新的促销活动提醒模块(新观察者)可以很容易地添加到关注商品价格变化(主题)的观察者列表中。对于维护来说,当主题或者观察者的业务逻辑发生变化时,只需要修改对应的主题或观察者内部的代码,而不会影响到其他部分的代码。这就好比在优衣库事件后,如果消费者的抵制方式发生变化(观察者逻辑改变)或者优衣库调整品牌形象修复策略(主题逻辑改变),这些修改可以相对独立地进行。
  1. 实际系统设计中的应用建议
  • 事件驱动架构借鉴
  • 在设计类似的具有动态响应需求的系统时,可以借鉴事件驱动架构,而观察者模式是事件驱动架构的一个基础模式。例如,在一个大型的电商平台中,可以将商品价格变化、库存变化等作为事件(主题状态变化),而订单系统、推荐系统等作为观察者。
  • 当商品价格下降(主题状态改变)时,订单系统可以根据新价格生成新的订单,推荐系统可以将该商品推荐给更多用户。通过这种方式,系统的各个部分可以根据事件的发生灵活地做出反应,就像在优衣库事件中,各个相关方根据品牌行为变化做出反应一样。
  • 消息队列的应用
  • 为了更好地实现观察者模式的通知机制,可以使用消息队列。消息队列可以作为主题和观察者之间的通信媒介,确保消息的可靠传递。例如,在一个金融系统中,当股票价格发生变化(主题状态改变)时,消息队列可以将价格变化消息发送给各个观察者(如交易系统、分析系统等)。
  • 这样可以避免因为网络波动或者系统繁忙等原因导致的通知丢失,同时也可以对消息进行异步处理,提高系统的整体性能和响应能力,就像在复杂的商业事件响应中,确保各个相关方能够及时、可靠地收到信息并做出响应。
相关文章
|
5月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
80 1
|
6月前
|
设计模式 存储 Java
Java设计模式之观察者模式详解
Java设计模式之观察者模式详解
|
7月前
|
设计模式 存储 Java
Java设计模式【二十】:观察者模式
Java设计模式【二十】:观察者模式
47 0
|
7月前
|
设计模式 Java
Java一分钟之-设计模式:观察者模式与事件驱动
【5月更文挑战第17天】本文探讨了Java中实现组件间通信的观察者模式和事件驱动编程。观察者模式提供订阅机制,当对象状态改变时通知所有依赖对象。然而,它可能引发性能问题、循环依赖和内存泄漏。代码示例展示了如何实现和避免这些问题。事件驱动编程则响应用户输入和系统事件,但回调地狱和同步/异步混淆可能造成困扰。JavaFX事件驱动示例解释了如何处理事件。理解这两种模式有助于编写健壮的程序。
82 1
|
7月前
|
设计模式 前端开发 NoSQL
聊聊Java设计模式-观察者模式
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式。指在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。
94 0
聊聊Java设计模式-观察者模式
|
7月前
|
设计模式 Java
Java设计模式:什么是观察者模式(Observer Pattern)?
Java设计模式:什么是观察者模式(Observer Pattern)?
68 0
|
设计模式 消息中间件 NoSQL
Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式
Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式
77 1
|
设计模式 Java
实时更新:解析Java设计模式中的观察者模式
在软件开发领域,设计模式是一组经过验证的最佳实践方法,用于解决各种常见问题。观察者模式是一种行为型设计模式,其目标是在对象之间建立一种依赖关系,使得一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。在本文中,我们将深入了解观察者模式的核心思想、应用场景以及它在Java中的实际运用。
108 0
|
设计模式 Java
java实现23种设计模式-观察者模式
java实现23种设计模式-观察者模式
43 0
|
设计模式 Java
Java设计模式解析:观察者模式的应用和实例
Java设计模式解析:观察者模式的应用和实例