项目中的解耦小能手-观察者模式

目录

1.使用场景

2.什么是观察模式

3.观察者模式结构图

4.代码实现案例

4.1 subject代码实现

4.2 Observer类代码实现

5. 回顾总结


1.使用场景

       当一个对象的改变需要同事改变其他对象的时候,如:订单中心-下单成功需要通知库存、物流和积分去做相应的处理。这个时候就可以使用观察者模式。

2.什么是观察模式

          观察者模式又叫发布-订阅模式(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是它们能够更新自己。

3.观察者模式结构图

4.代码实现案例

4.1 subject代码实现
public abstract class Subject {
   private List<Observer> observers = new ArrayList<>();


   public void attach(Observer observer) {
        observers.add(observer);
   }

    public void detach(Observer observer) {
        observers.remove(observer);
   }
   
   public void notify() {

       for(Observer observer: observers) {
           observer.update();
       }
   }
    
}
4.2 Observer类代码实现
public abstract class Observer {

    public abstract void update();
}

code和观察者之间存在一定的关联性。观察者模式是一种设计模式,它用于在对象之间定义一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖它的对象都能够得到通知并自动更新。在观察者模式中,观察者对象会注册到被观察的主题对象上,当主题对象的状态发生变化时,会通知所有的观察者对象进行相应的处理。

在编程中,可以通过定义观察者接口和实现类来创建观察者对象,并将其注册到被观察的对象上。当被观察对象的状态发生变化时,会调用观察者对象的相应方法进行处理。这样,观察者对象就可以根据被观察对象的变化来做出相应的响应。

因此,code和观察者之间存在关联性,通过观察者模式可以实现code对观察者进行通知和更新。这种关联性可以帮助我们实现一些具有实时性要求的功能,例如事件驱动的系统、UI界面的更新等。

5. 回顾总结

       观察者模式所做的工作就是解耦合,让耦合双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。

相关推荐

  1. 中介模式:优雅利器

    2024-04-23 22:14:04       39 阅读
  2. C++观察模式

    2024-04-23 22:14:04       29 阅读
  3. 设计模式:生活观察模式

    2024-04-23 22:14:04       44 阅读
  4. django实现观察模式

    2024-04-23 22:14:04       48 阅读
  5. C# 基于事件观察模式

    2024-04-23 22:14:04       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 22:14:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 22:14:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 22:14:04       82 阅读
  4. Python语言-面向对象

    2024-04-23 22:14:04       91 阅读

热门阅读

  1. 【设计模式】观察者模式

    2024-04-23 22:14:04       35 阅读
  2. ecs150 project2 Unix Shell

    2024-04-23 22:14:04       31 阅读
  3. Vue3+Ant Design 父组件调用子组件方法

    2024-04-23 22:14:04       32 阅读
  4. 基于深度神经网络的图像识别技术研究

    2024-04-23 22:14:04       31 阅读
  5. vue-router学习4:嵌套路由

    2024-04-23 22:14:04       29 阅读
  6. nginx配置不同设备访问不同地址

    2024-04-23 22:14:04       37 阅读
  7. Cesium简单案例

    2024-04-23 22:14:04       29 阅读
  8. net模块

    net模块

    2024-04-23 22:14:04      31 阅读