• java设计模式之观察者设计模式的前世今生


    观察者设计模式是什么?

    观察者设计模式(有时又被称为模型-视图-监听者(Model-View-Listener)模式或从属者(Dependents)模式)是一种软件设计模式,它定义了一种关系,在这种关系中,一个目标对象(被观察者)维护了对依赖于它的观察者对象(观察者)的引用。当目标对象的状态发生改变时,所有依赖于它的观察者对象都会收到通知并自动更新。这种模式通常被用来实现事件处理系统。

    在观察者设计模式中,存在以下角色:

    1. 抽象目标(Subject):它是抽象观察者(Observer)和抽象主题(ConcreteSubject)的接口,定义了添加和删除观察者以及向观察者发送通知的方法。
    2. 具体目标(ConcreteSubject):它是抽象主题(Subject)的具体实现,维护了对观察者对象的引用,并在状态改变时调用相应的方法来通知观察者。
    3. 抽象观察者(Observer):它是抽象目标(Subject)和具体观察者(ConcreteObserver)的接口,定义了更新状态的方法。
    4. 具体观察者(ConcreteObserver):它是抽象观察者(Observer)的具体实现,实现了更新状态的方法,以便在目标对象状态改变时更新自身的状态。

    观察者设计模式通常被用来实现事件处理系统,例如在GUI应用程序中,当用户与界面交互时,事件被发送到相应的组件,组件会在接收到事件后调用相应的方法来更新自身的状态。此外,观察者设计模式还可以用于实现日志记录、数据缓存等场景。

    观察者设计模式能做什么?

    观察者设计模式可以用于实现以下场景:

    1. 事件通知机制:当某个事件发生时,观察者模式可以用来通知所有依赖于该事件的观察者对象。例如,在GUI应用程序中,当用户与界面交互时,可以通知相应的组件更新界面。
    2. 数据通信:观察者模式可以用于实现数据通信,当数据源(被观察者)的状态发生改变时,所有依赖于它的观察者(视图)都会自动更新。例如,在Web应用程序中,当数据模型(被观察者)的状态改变时,相应的页面(视图)会自动更新。
    3. 日志记录:观察者模式可以用于实现日志记录,当某个事件发生时,可以通知所有依赖于该事件的观察者对象记录日志。例如,在服务器应用程序中,当发生异常时,可以通知日志记录器记录异常信息。
    4. 组件重用:观察者模式使得组件之间耦合度降低,有利于实现组件的重用。例如,在软件开发过程中,某个组件的功能需要被多个应用使用,可以使用观察者模式将该组件封装成被观察者,并让其他应用作为观察者来使用该组件。

    总之,观察者设计模式是一种非常有用的设计模式,可以用于实现各种不同的场景,包括事件通知、数据通信、日志记录和组件重用等。

    对比以往架构,观察者设计模式带来了哪些好处?

    对比以往的架构,观察者设计模式带来了以下好处:

    1. 松散耦合:观察者模式使得对象之间耦合度降低,被观察者和观察者之间没有直接的联系。被观察者不需要知道观察者的存在,也不需要知道观察者是否有观察它的状态。这样就实现了对象的松散耦合,有利于代码的维护和重用。
    2. 高内聚性:观察者模式将数据通知和事件通知的功能集中到了被观察者对象中,这样有利于提高代码的内聚性,减少代码的复杂度和歧义性。
    3. 可扩展性:观察者模式可以方便地添加新的观察者对象,被观察者对象在通知观察者对象时可以动态地确定需要通知的对象。这样,系统可以方便地进行扩展,实现更加复杂的功能。
    4. 低复杂性:观察者模式简化了对象之间的交互关系,将复杂的通知机制简化为一个简单的通知机制。这样,代码变得更加易于理解和维护,减少了代码的复杂度和歧义性。
    5. 高重用性:观察者模式使得被观察者和观察者之间耦合度降低,被观察者可以独立地变化和升级,而观察者可以重用原来的代码。这样,可以大大提高代码的重用性和可维护性。
    6. 高可维护性:观察者模式使得代码变得更加易于维护,减少了代码的复杂度和歧义性。这样,开发人员可以更加方便地进行代码维护和升级,提高了软件的可靠性。

    总之,观察者设计模式带来了松散耦合、高内聚性、可扩展性、低复杂性、高重用性和高可维护性等好处,是一种非常有用的设计模式。

  • 相关阅读:
    ubuntu Setforeground 前台应用切换
    LSTMviz配置
    神经网络基础
    KT6368A蓝牙芯片认证客户FCC定频出现频偏的处理总结
    火山引擎A/B测试平台的实验管理重构与DDD实践
    空间几何(点线面)知识整理
    centos7平台安装部署mysql8(.tar包形式)
    YOLOv8-Cls推理详解及部署实现
    HTTP 和 HTTPS
    解密智能化评估在培训考试系统中的应用
  • 原文地址:https://blog.csdn.net/luoluoal/article/details/130883042