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

java观察者模式实例

希赛网 2024-06-06 15:25:00

观察者模式是一种常用的设计模式之一,它主要用于对象间的一对多依赖关系的解耦。当一个对象的状态发生变化时,所有依赖于它的对象都将得到通知并自动更新。Java中的观察者模式也被称为发布-订阅模式。本文将探讨Java中观察者模式的实现方法。

1. 模式结构

观察者模式主要由以下四个角色组成:

- 抽象主题角色(Subject):它是被观察的对象。抽象主题角色中需要维护一个观察者集合,用于管理所有观察者对象。

- 具体主题角色(ConcreteSubject):它是抽象主题角色的实现类。它通常包含了需要被观察状态以及通知观察者的方法。

- 抽象观察者角色(Observer):它是观察者的抽象类或接口。抽象观察者角色中定义了一个update()方法,用于接收主题对象的通知。

- 具体观察者角色(ConcreteObserver):它是观察者的具体实现类。它实现了抽象观察者角色中的update()方法,用于接收主题对象的通知并进行相应的处理。

2. 实现方法

在Java中,通过继承Observable类和实现Observer接口来实现观察者模式。具体流程如下:

- 创建抽象主题角色。定义被观察者对象的公共方法和维护观察者集合的方法。

- 创建具体主题角色。继承抽象主题角色,实现通知观察者的方法。

- 创建抽象观察者角色。定义观察者对象的更新方法。

- 创建具体观察者角色。实现抽象观察者角色中的更新方法,完成接收主题对象通知并进行相应处理的功能。

- 在客户端中实例化具体主题和具体观察者角色,将观察者对象注册到被观察对象的观察者集合中。

3. 代码实现

以下是一个简单的Java观察者模式实例,展示了如何通过继承Observable类和实现Observer接口来实现观察者模式。

```java

import java.util.Observable;

import java.util.Observer;

public class ObserverDemo {

public static void main(String[] args) {

// 创建被观察对象

MySubject subject = new MySubject();

// 创建观察者对象

Observer observer1 = new MyObserver("Observer 1");

Observer observer2 = new MyObserver("Observer 2");

Observer observer3 = new MyObserver("Observer 3");

// 注册观察者对象

subject.addObserver(observer1);

subject.addObserver(observer2);

subject.addObserver(observer3);

// 改变被观察对象的状态

subject.changeState();

}

}

// 定义抽象主题角色

class MySubject extends Observable {

private boolean state = false;

public void changeState() {

state = true;

setChanged();

notifyObservers();

}

public boolean getState() {

return state;

}

}

// 定义抽象观察者角色

interface MyObserverInterface {

void update(MySubject subject);

}

// 定义具体观察者角色

class MyObserver implements Observer, MyObserverInterface {

private String name;

public MyObserver(String name) {

this.name = name;

}

@Override

public void update(Observable o, Object arg) {

MySubject subject = (MySubject) o;

update(subject);

}

@Override

public void update(MySubject subject) {

System.out.println(name + " received notification: " + subject.getState());

}

}

```

在上述代码中,我们创建了一个MySubject类,继承了Observable类,并实现了一个changeState()方法,用于改变被观察对象的状态。当状态改变时,setChanged()方法被调用,表明状态变更已经发生。notifyObservers()方法将自动通知所有注册的观察者对象,调用它们的update()方法。

我们还创建了一个MyObserver类,实现了Observer接口和MyObserverInterface接口,完成观察者角色的任务。在接收到通知后,观察者对象将自动调用update()方法进行相应的处理。

4. 总结

Java中的观察者模式是一种十分常用的设计模式,它可以帮助在对象间实现一对多的依赖关系解耦。通过继承Observable类和实现Observer接口,我们可以轻松实现观察者模式。在实现观察者模式时,我们需要定义抽象主题角色、具体主题角色、抽象观察者角色和具体观察者角色等角色。

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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