希赛考试网
首页 > 软考 > 软件设计师

观察者设计模式类图

希赛网 2024-06-06 17:53:46

观察者设计模式是一种行为型模式,它允许对象上的一些其他对象(称为“观察者”)自动获得自身状态的变化通知。该模式也被称为发布-订阅模式,其中发布者与订阅者是紧密相关的。 使用观察者模式时,当一个对象更改状态时,其所有依赖项都会自动更新。

观察者设计模式的类图如下所示:

![Observer Design Pattern Class Diagram](https://www.dofactory.com/images/diagrams/net/observer.gif)

该模式包含以下角色:

- Subject:抽象类或接口,定义了一种通知其所有观察者的通用接口。该接口包括注册和删除观察者,以及通知所有观察者对象的方法。

- ConcreteSubject:具体主题类,继承或实现Subject并在自身状态改变时通知其所有观察者。

- Observer:抽象类或接口,定义了一个具有更新状态的方法,以便主题可以通知观察者的更新。

- ConcreteObserver:具体观察者可以是任何类,因为它们实现了Observer接口并实现更新方法以便更新状态。

观察者模式是一个非常重要的设计模式,特别是当我们想要实时地通知一些特定对象时。该模式也很容易实现,因为它包括很少的类和方法。下面,我们将从多个角度来理解这个模式。

实际使用场景

观察者模式可以让我们更容易地发现系统中的和状态相关的事件,并在状态改变时通知相关对象。这可以通过许多不同场景来实现。例如,在银行中,可以用观察者模式来实现通知客户的账户余额变化,从而使客户能够更好地掌握自己的财务状况。 在游戏中,可以使用观察者模式来监听武器发射时的状态更改,以便在场景中触发相应的动画或声音效果。

观察者和被观察对象之间的通信

在观察者模式中,主题(或被观察者)和观察者之间的通信可以是直接或间接的。在直接通信中,主题与其观察者之间建立通信管道,以便它们可以相互发送消息或更新。在间接通信中,主题和观察者使用中介来进行通信,例如代理或消息队列。

观察者模式的示例实现

假设我们正在开发一个在线报纸应用程序。当文章发布时,该应用程序会向订阅该作者的所有读者发送邮件。在这种情况下,我们可以使用观察者模式来完成此任务。以下是这个示例的UML类图:

![Observer Design Pattern Example Class Diagram](https://dzone.com/storage/rc-covers/10693-thumbnai.png)

在这个示例中,我们建立了以下类:

- Subject(Publiction):这是一个抽象类,其中包括一个名为addSubscriber()和removeSubscriber()的方法。这些方法用于管理所有订阅者,以便在文章发布时给他们发送电子邮件通知。

- ConcreteSubject(Magazine):这是Subject抽象类的具体实现。在这个示例中,我们假设我们的在线出版物已经发布了。因此,在这个具体主题中,我们包含一个名为sendEmail()的方法,该方法的作用是发送电子邮件通知给所有订阅者。

- Observer(Reader):这是观察者的抽象类。在这个示例中,它只包括一个叫update()的抽象方法,该方法用于接收并显示所有电子邮件通知。

- ConcreteObserver(RealReader):这是Observer抽象类的具体实现。在这个示例中,我们包括一个名为displayEmail()的具体方法,该方法显示从出版物发送的所有电子邮件通知,以便读者能够及时感知。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件