ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应 [打印本页]

作者: 民工心事    时间: 2024-11-30 13:43
标题: Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
背景事件:近日,优衣库宣布不再使用新疆棉花,这一举措引发了广泛的社会讨论。消费者的反应和舆论的压力,让优衣库的决策迅速影响了市场和品牌形象。类似的,许多系统也面临着需要根据外部事件或状态的变化,做出即时反应的需求。
在软件设计中,观察者模式(Observer Pattern) 就是为了处理这种“状态变化与反应”的需求。它允许一个对象(主题)发生变化时,关照所有依赖它的对象(观察者),而不需要显式的调用,即松耦合地处理不同模块间的动态更新。
本日,我们将结合优衣库棉花事件,来讲解如何使用 观察者模式 来应对复杂业务中的事件驱动响应。
一、观察者模式概述

1.1 观察者模式的界说

观察者模式属于行为型设计模式,其核心思想是:当对象的状态发生改变时,所有依赖于它的对象都会收到关照并自动更新。这种模式非常实用于当系统中的某一部分状态变化需要同时关照到其他部分的场景。
1.2 观察者模式的组成部分

优衣库不使用新疆棉 的事件中,品牌决策就像主题对象,而消费者、舆论、媒体等就是观察者。每当品牌作出决策,消费者的情绪、舆论的反应都会发生变化,观察者(消费者)的感情或行为会随之改变。
二、观察者模式与优衣库事件的类比

2.1 事件背景

假设优衣库公司决定不再使用新疆棉,这一决策会触发不同的消费者、股东、媒体等不同的观察者产生反应:
这些变化是动态的,且每当优衣库做出决策时,所有相关的观察者(消费者、媒体等)都会收到关照并做出相应反应。
2.2 在系统设计中的应用

在类似的业务场景中,观察者模式非常有用。通过观察者模式,当主题(如优衣库品牌决策)发生变化时,所有需要响应变化的组件(如消费者、舆论)都会自动收到关照并执行相应的处理逻辑。这种设计使得不同的模块之间保持了松耦合的关系,不需要主题对象知道观察者的详细细节。
三、观察者模式的实现

接下来,我们通过代码来实现一个基于观察者模式的简单示例,模拟优衣库品牌决策引发的消费者反应。
3.1 代码示例:实现观察者模式
  1. // 主题类:优衣库品牌决策
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. // 主题接口
  5. interface BrandDecision {
  6.     void addObserver(ConsumerObserver observer);
  7.     void removeObserver(ConsumerObserver observer);
  8.     void notifyObservers();
  9. }
  10. // 具体主题:优衣库的品牌决策
  11. class UniqloBrandDecision implements BrandDecision {
  12.     private List<ConsumerObserver> observers = new ArrayList<>();
  13.     private String decision;
  14.     @Override
  15.     public void addObserver(ConsumerObserver observer) {
  16.         observers.add(observer);
  17.     }
  18.     @Override
  19.     public void removeObserver(ConsumerObserver observer) {
  20.         observers.remove(observer);
  21.     }
  22.     @Override
  23.     public void notifyObservers() {
  24.         for (ConsumerObserver observer : observers) {
  25.             observer.update(decision);
  26.         }
  27.     }
  28.     public void makeDecision(String decision) {
  29.         this.decision = decision;
  30.         System.out.println("优衣库品牌做出决策: " + decision);
  31.         notifyObservers();
  32.     }
  33. }
  34. // 观察者接口:消费者反应
  35. interface ConsumerObserver {
  36.     void update(String decision);
  37. }
  38. // 具体观察者:消费者
  39. class Consumer implements ConsumerObserver {
  40.     private String name;
  41.     public Consumer(String name) {
  42.         this.name = name;
  43.     }
  44.     @Override
  45.     public void update(String decision) {
  46.         System.out.println(name + " 收到决策通知,决定如何行动: " + decision);
  47.         if (decision.contains("不使用新疆棉")) {
  48.             System.out.println(name + " 表示失望,可能不再购买!");
  49.         } else {
  50.             System.out.println(name + " 觉得决策不错,继续购买!");
  51.         }
  52.     }
  53. }
复制代码
3.2 代码分析

在上面的代码中:
3.3 客户端代码:模拟消费者反应
  1. public class ObserverPatternExample {
  2.     public static void main(String[] args) {
  3.         // 创建品牌决策主题
  4.         UniqloBrandDecision uniqloDecision = new UniqloBrandDecision();
  5.         // 创建消费者观察者
  6.         Consumer consumer1 = new Consumer("消费者A");
  7.         Consumer consumer2 = new Consumer("消费者B");
  8.         // 消费者注册到品牌决策
  9.         uniqloDecision.addObserver(consumer1);
  10.         uniqloDecision.addObserver(consumer2);
  11.         // 优衣库做出决策
  12.         uniqloDecision.makeDecision("优衣库决定不再使用新疆棉,改用其他地区棉花");
  13.         // 优衣库做出新的决策
  14.         uniqloDecision.makeDecision("优衣库决定继续使用新疆棉");
  15.     }
  16. }
复制代码
3.4 输出结果
  1. 优衣库品牌做出决策: 优衣库决定不再使用新疆棉,改用其他地区棉花
  2. 消费者A 收到决策通知,决定如何行动: 优衣库决定不再使用新疆棉,改用其他地区棉花
  3. 消费者A 表示失望,可能不再购买!
  4. 消费者B 收到决策通知,决定如何行动: 优衣库决定不再使用新疆棉,改用其他地区棉花
  5. 消费者B 表示失望,可能不再购买!
  6. 优衣库品牌做出决策: 优衣库决定继续使用新疆棉
  7. 消费者A 收到决策通知,决定如何行动: 优衣库决定继续使用新疆棉
  8. 消费者A 觉得决策不错,继续购买!
  9. 消费者B 收到决策通知,决定如何行动: 优衣库决定继续使用新疆棉
  10. 消费者B 觉得决策不错,继续购买!
复制代码
四、观察者模式的优势与应用

4.1 长处

4.2 缺点

五、总结

通过优衣库不使用新疆棉事件,我们可以清楚地看到观察者模式在应对复杂决策和动态反应中的优势。当品牌作出决策时,消费者和舆论等多个观察者会收到关照并做出反应,无缝的事件驱动机制让这种决策的传播变得高效且灵活。
如果你的系统中涉及到多个模块需要对某一变化做出响应,观察者模式无疑是一个非常符合的解决方案。它能够帮助你保持系统的松耦合,快速响应变化,同时确保灵活的扩展性。
希望这篇文章能够帮助你理解如何通过观察者模式应对复杂的业务决策和系统响应!如果你对其他设计模式的应用感
作者:代老师的编程课
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 Java码界探秘
.


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4