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

观察者模式类图触发器

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

观察者模式是一种软件设计模式,用于在对象之间定义一对多的依赖关系。在这个模式中,一个对象(主题)发生变化时,它的所有依赖者(观察者)都会自动收到通知并更新。

这种类型的设计模式是行为型模式的一种,因为它可以用于改变对象之间的通信方式,从而改变它们的行为。

类图是一种图形表示法,用于显示系统的类、接口和它们之间的关系。它可用于识别和测试软件系统中的类之间的关系。类图中的触发器行为在系统中发生某些事情时触发一个事件。

类图触发器是一个细粒度的观察者模式,它提供了通知目标对象的能力,使得这些对象可以在自己的命名空间内执行动作。因此,观察者模式类图触发器可以作为一个设计模式的成分来使用,以便为其他面向对象编程语言中的设计提供引导。

实现观察者模式的三种类图

- 简单的观察者模式:该模式通常由两个接口组成,即观察者接口和主题接口。观察者接口用于使观察者能够接收自己的通知,并且主题接口用于让对主题感兴趣的观察者注册自己。该模式的实现将使我们的代码灵活,但需要不断重复相同的代码。

下面是一个简单的观察者模式类图:

![Simple Observer Class Diagram](https://i.imgur.com/ncwMneX.png)

- 可配置性观察者模式:具有这种模式的观察者可以选择哪个主题通知,而不使用observable中的默认设置。因此,当对系统改变有多种响应时,这种模式更有用。下图是可配置性观察者模式类图:

![Configurable Observer Class Diagram](https://i.imgur.com/uGvhh4j.png)

- 带守护程序的观察者模式:将逻辑集成到我们的模型中。它包括了一个额外的类型,它被称为保护程序。保护程序可以在状态改变时调节观察者。

下图是带守护程序的观察者模式类图:

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

如何实现类图触发器?

创建一个类来负责触发事件。这个类是主题类,具有一些需要被通知变化的属性和方法。

一个观察者接口用于定义被通知的方法,这个方法将在主题发生变化时调用。这个接口将用于创建一个观察者对象。

在主题类上传入观察者对象,并在主题类发生改变时通知观察者。

现在我们将实现一个简单的类图触发器以演示观察者模式。它将包括一个主题类,三个观察者,以及一个客户端程序,用于操作。

![Observer Pattern Sequence Diagram](https://i.imgur.com/h5KJw0X.png)

下面是用Java实现观察者模式的代码:

```

import java.util.*;

interface Observer {

public void update(int num);

}

class Subject {

private ArrayList observers = new ArrayList ();

private int number;

public void attach(Observer observer) {

observers.add(observer);

}

public void detach(Observer observer) {

observers.remove(observer);

}

public void notifyObservers() {

for (Observer o : observers) {

o.update(number);

}

}

public void setNumber(int number) {

this.number = number;

notifyObservers();

}

}

class BinaryObserver implements Observer {

public void update(int num) {

System.out.println("Binary String: " + Integer.toBinaryString(num));

}

}

class OctalObserver implements Observer {

public void update(int num) {

System.out.println("Octal String: " + Integer.toOctalString(num));

}

}

class HexaObserver implements Observer {

public void update(int num) {

System.out.println("Hex String: " + Integer.toHexString(num));

}

}

public class ObserverPatternDemo {

public static void main(String[] args) {

Subject subject = new Subject();

new BinaryObserver().attach(subject);

new OctalObserver().attach(subject);

new HexaObserver().attach(subject);

System.out.println("First state change: 15");

subject.setNumber(15);

System.out.println("\nSecond state change: 10");

subject.setNumber(10);

}

}

```

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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