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

java观察者模式的实现

希赛网 2024-06-09 09:10:37

由于软件系统中数据和对象之间的依赖性和耦合性越来越紧密,我们需要一种方法来解除它们之间的耦合。观察者模式是一种能够有效地将对象和数据解耦的设计模式。本文将从概念、结构、实现以及应用等多个角度,介绍Java观察者模式的实现。

概念

观察者模式是一种行为型设计模式,它建立一种对象之间的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都会得到通知并自动更新。观察者模式中的“观察者”和“被观察者”分别指依赖的对象和发生变化的对象。

结构

观察者模式主要由四个角色组成:抽象被观察者(Subject)、具体被观察者(ConcreteSubject)、抽象观察者(Observer)和具体观察者(ConcreteObserver)。

具体实现

在Java中,我们可以通过继承java.util.Observable以及实现java.util.Observer接口来实现观察者模式。具体步骤如下:

1.定义抽象被观察者类Subject,并将需要被通知的观察者对象存储在一个ArrayList中。

```

public abstract class Subject extends Observable {

private ArrayList observers;

public Subject() {

observers = new ArrayList<>();

}

public void addObserver(Observer observer) {

observers.add(observer);

}

public void removeObserver(Observer observer) {

observers.remove(observer);

}

public void notifyObservers(Object object) {

for (Observer observer : observers) {

observer.update(this, object);

}

}

}

```

2.定义具体被观察者类ConcreteSubject,并在其内部状态发生改变时,调用notifyObservers()方法通知所有观察者

```

public class ConcreteSubject extends Subject {

private String state;

public String getState() {

return state;

}

public void setState(String state) {

this.state = state;

setChanged();

notifyObservers(state);

}

}

```

3.定义抽象观察者类Observer,定义一个update()方法用来接收被观察者的通知。

```

public interface Observer {

void update(Observable observable, Object object);

}

```

4.定义具体观察者类ConcreteObserver,实现update()方法并将自己注册到被观察者中。

```

public class ConcreteObserver implements Observer {

public void update(Observable observable, Object object) {

if (observable instanceof ConcreteSubject) {

System.out.println("观察者当前状态为:" + ((ConcreteSubject) observable).getState());

}

}

}

```

使用场景

观察者模式通常用于以下场景:

1. 一个对象的状态改变需要同时改变其它对象的状态

2. 一个对象必须通知其它对象,但它并不需要知道其它对象的细节

3. 当一个对象需要将自己的改变通知给其它对象,且这些对象可以根据自己的需求注册或取消注册来接收相应的通知。

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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