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

观察者模式的定义和特征是什么

希赛网 2024-06-05 18:40:41

观察者模式是一种在软件设计中常用的模式,用于在对象间定义一对多的依赖关系、以使得一个类型的对象改变状态时,所有依赖该对象的其他对象都会被通知并自动更新。本文将从多个角度分析观察者模式的定义和特征,包括模式结构、角色、实现方式、适用场景和优缺点等方面。

模式结构

观察者模式的主要结构包括以下几个部分:

- 抽象主题(Subject):定义了一个抽象接口,用于增加或删除观察者对象,并通知所有观察者对象。

- 具体主题(ConcreteSubject):实现了抽象主题的接口,具体主题发生变化时,会通知所有的观察者对象。

- 抽象观察者(Observer):定义了一个抽象接口,在接收具体主题通知时进行更新。

- 具体观察者(ConcreteObserver):实现了抽象观察者的接口,具体观察者将自己添加到具体主题的观察者列表中,并在得到通知时进行更新。

角色

观察者模式中有四个角色,分别是抽象主题、具体主题、抽象观察者和具体观察者。其中,抽象主题(Subject)和抽象观察者(Observer)是所有具体主题(ConcreteSubject)和具体观察者(ConcreteObserver)的父类或接口,用于规范规则和约定。具体主题(ConcreteSubject)和具体观察者(ConcreteObserver)则是按照规范和约定实现的具体执行者,用于实现具体功能。

实现方式

观察者模式的实现方式有两种,分别是基于推(Push-Based)和基于拉(Pull-Based)的方式。

基于推的方式是指,具体主题在发生变化时主动通知所有观察者,将变化的数据推送给观察者,观察者对象对推送的数据进行处理。这种方式的优点是实现简单,但缺点是所有观察者都会接收到完整的数据,需要对数据进行过滤和处理,造成了一定的浪费。

基于拉的方式是指,具体主题在发生变化时不主动通知观察者,而是在观察者需要数据时才向具体主题请求数据,将数据拉取到观察者本地进行处理。这种方式的优点是只有需要的观察者才会接收到数据,减少了数据的浪费,但缺点是需要多次请求数据,增加了通信成本。

适用场景

观察者模式适用于下列场景:

- 当一个对象的状态改变时,需要通知其他对象,并让它们得到更新。

- 当需要将一个对象与多个其他对象解耦,从而实现松耦合的设计。

优缺点

观察者模式的优点如下:

- 实现了对象之间的松耦合,使得对象之间的关系更加灵活;

- 增加新的观察者时,不需要修改主题对象的代码;

- 如果主题对象的修改很少,不会对观察者造成太大的影响。

观察者模式的缺点如下:

- 如果观察者很多,通知所有的观察者会导致系统性能下降;

- 如果观察者和主题对象的层次关系过于复杂,会使代码难以维护。

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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