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

观察者模式类图关系

希赛网 2024-06-09 10:12:28

观察者模式(Observer Pattern)是一种软件设计模式,它定义了一种对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。该模式也被称为发布-订阅模式(Publish/Subscribe Pattern)。

在观察者模式中,有两种角色:被观察者(Subject)和观察者(Observer)。被观察者维护了一个观察者列表,并提供了注册和删除观察者的接口。观察者注册成功后,被观察者会在状态发生改变时通知所有的观察者。观察者接收到通知后,会调用被观察者的接口获取最新的状态信息,并进行相应的处理。

下面我们来分析观察者模式类图关系。

一、UML类图

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

![Observer Pattern UML Class Diagram](https://i.imgur.com/josbEoG.png)

其中,Subject是被观察者接口,ConcreteSubject是具体的被观察者实现类;Observer是观察者接口,ConcreteObserver是具体的观察者实现类。

二、角色介绍

1. Subject

被观察者接口,定义了注册、删除和通知观察者的方法。具体的被观察者实现类需要实现该接口,并在状态发生改变时通知所有的观察者。

2. ConcreteSubject

具体的被观察者实现类,维护了一个观察者列表。当状态发生改变时,会通知所有的观察者。

3. Observer

观察者接口,定义了接收通知并更新的方法。具体的观察者实现类需要实现该接口,并注册到具体的被观察者实现类中。

4. ConcreteObserver

具体的观察者实现类,实现了接收通知并更新的方法。当被观察者发生状态改变时,会调用该类的update()方法。

三、实现步骤

观察者模式的实现步骤如下:

1. 定义被观察者接口Subject

```java

public interface Subject {

void registerObserver(Observer observer);

void removeObserver(Observer observer);

void notifyObservers();

}

```

2. 定义观察者接口Observer

```java

public interface Observer {

void update();

}

```

3. 定义具体的被观察者实现类ConcreteSubject

```java

public class ConcreteSubject implements Subject {

private List observers = new ArrayList ();

private int state;

public void setState(int state) {

this.state = state;

notifyObservers();

}

public void registerObserver(Observer observer) {

observers.add(observer);

}

public void removeObserver(Observer observer) {

observers.remove(observer);

}

public void notifyObservers() {

for (Observer observer : observers) {

observer.update();

}

}

}

```

4. 定义具体的观察者实现类ConcreteObserver

```java

public class ConcreteObserver implements Observer {

private int observerState;

public void update() {

observerState = ConcreteSubject.getState();

}

}

```

5. 使用观察者模式

```java

public class Client {

public static void main(String[] args) {

ConcreteSubject subject = new ConcreteSubject();

ConcreteObserver observer = new ConcreteObserver();

subject.registerObserver(observer);

subject.setState(1);

subject.setState(2);

subject.removeObserver(observer);

}

}

```

四、优缺点分析

观察者模式有以下优点:

1. 解耦合。被观察者和观察者之间的依赖关系由观察者模式处理,从而减少了它们之间的耦合。

2. 可扩展性。添加或删除观察者不会对其他部分造成影响,从而增强了系统的可扩展性。

3. 合理性。如果一个对象需要将它的状态改变通知其他对象的时候,我们可以考虑使用观察者模式。

观察者模式有以下缺点:

1. 有可能出现循环依赖的情况。如果观察者之间存在循环依赖的情况,将无法实现正确的通知。

2. 有可能导致性能问题。如果被观察者频繁地改变状态,可能会导致大量的通知,从而导致性能问题。

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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