观察者模式

观察者模式概述

引入:交通信号灯与汽车示意图

分析

  • 交通信号灯 <–> 观察目标
  • 汽车(汽车驾驶员)<–> 观察者

软件系统:一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动。

观察者模式的定义:定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。

观察者模式的结构与实现

观察者模式的角色

观察者模式结构中通常包括观察目标和观察者两个继承层次结构。

  • Subject(目标)
  • ConcreteSubject(具体目标)
  • Observer(观察者)
  • ConcreteObserver(具体观察者)

观察者模式的优缺点与适用环境

模式优点

  • 可以实现表示层和数据逻辑层的分离。
  • 在观察目标和观察者之间建立一个抽象的合。
  • 支持广播通信,简化了一对多系统设计的难度。
  • 符合开闭原则,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便。

模式缺点

  • 将所有的观察者都通知到会花费很多时间。
  • 如果存在循环依赖时可能导致系统崩溃。
  • 没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而只是知道观察目标发生了变化。

模式适用环境

  • 一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变和复用。
  • 一个对象的改变将导致一个或多个其他对象发生改变,且并不知道具体有多少对象将发生改变,也不知道这些对象是谁。
  • 需要在系统中创建一个触发链。

发表回复

Breeze Wang

A student majoring in Software Engineering at Central South University has an understanding of software development techniques, software architecture, and is able to use Godot to develop game projects. I am currently in the Game Development Laboratory at Central South University. I have experience participating in Global Game Jam. Loving game development.