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

java观察者模式代码

希赛网 2024-06-07 11:21:59

观察者模式是Java编程中的设计模式之一。观察者模式是一种对象行为模式,它被用来创建类似于事件处理系统的设计。本文将从多个角度分析Java观察者模式代码。

一、 观察者模式定义

观察者模式(Observer Pattern)又称为发布订阅模式(Publish/Subscribe),属于行为模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生改变时,会通知所有观察者,使它们能够自动更新自己。

二、 观察者模式的组成部分

1. 抽象被观察者(Subject):抽象被观察者角色把所有观察者对象的引用保存在一个集合里,每个被观察者都可以有任意数量的观察者。抽象被观察者提供了增加观察者、删除观察者、通知观察者等方法。

2. 抽象观察者(Observer):抽象观察者角色是一个抽象类或接口,它只有一个更新的方法,当被观察者调用该方法时,观察者将被通知。

3. 具体被观察者(ConcreteSubject):具体被观察者角色是实现抽象被观察者角色的具体类,它必须实现抽象被观察者角色所定义的接口。

4. 具体观察者(ConcreteObserver):具体观察者角色是实现抽象观察者角色的具体类,它必须实现抽象观察者角色所定义的接口,并实现更新方法。

三、 观察者模式的代码实现

以下是一个简单的Java实现观察者模式的代码:

让我们来解释这个代码,首先我们有一个主题(Subject),它是一个接口,有着添加、删除和通知观察者的方法。

```java

interface Subject {

public void registerObserver(Observer o);

public void removeObserver(Observer o);

public void notifyObservers();

}

```

然后我们有一个具体的主题(ConcreteSubject)类,它继承了主题接口,同时添加了一个数据字段和一组观察者,当数据改变时,它会通知所有的观察者。

```java

class ConcreteSubject implements Subject {

private List observers = new ArrayList ();

private int data;

public void registerObserver(Observer o) {

observers.add(o);

}

public void removeObserver(Observer o) {

observers.remove(o);

}

public void notifyObservers() {

for (Observer observer : observers) {

observer.update(data);

}

}

public void setData(int data) {

this.data = data;

notifyObservers();

}

}

```

现在我们有一个观察者(Observer)接口,它只有一个更新方法。

```java

interface Observer {

public void update(int data);

}

```

最后,我们有一个具体的观察者(ConcreteObserver)类实现了观察者接口,并通过主题注册了自己。

```java

class ConcreteObserver implements Observer {

private Subject subject;

public ConcreteObserver(Subject subject) {

this.subject = subject;

subject.registerObserver(this);

}

public void update(int data) {

System.out.println("Data has been changed to " + data);

}

}

```

四、 实现观察者模式的优缺点

1. 优点

(1) 降低耦合度:被观察者和观察者之间是松散耦合的,它们之间并不依赖彼此。当被观察者发生改变的时候,只需要通知观察者即可。

(2) 符合开闭原则:可以在不修改代码的情况下增加新的观察者。

(3) 非常适合需要事件处理的系统。

2. 缺点

(1) 观察者模式可能有过多的广播:如果观察者非常多,并且观察者之间有复杂的依赖关系,则会导致广播过程非常复杂。

(2) 观察者需要避免循环引用:在观察者之间存在循环引用时,很容易导致系统崩溃或重复发送通知。

五、 总结

在Java编程中,观察者模式是一种非常有用的设计模式。它通过主题和观察者之间的分离来提高代码的可维护性和可扩展性,使系统更有弹性。具体而言,观察者模式可以将系统的关注点转移到事件本身上,以便实现更好的事件驱动架构。

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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