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

使用jdk自带的观察者模式

希赛网 2024-06-09 09:28:39

观察者模式是一种十分常见的设计模式,它属于行为型模式,用于处理对象间的一对多依赖关系。在这种模式中,一个对象(称为主题)维护着一系列依赖于它的对象(称为观察者),并在满足一定条件时主动通知这些观察者。

在Java中,观察者模式已经被广泛运用了,而且JDK中还提供了一个标准的观察者模式接口类库——Observer和Observable。下面从使用场景、优缺点、具体实现等方面,对JDK自带的观察者模式进行详细解析。

一、使用场景

观察者模式一般适用于以下场景:

1. 一个抽象模型有两个方面,其中一个方面依赖于另一个方面;

2. 当一个对象的改变需要同时改变其他对象,而且不知道有多少对象需要改变时;

3. 当一个对象必须通知其他对象,而其他对象又不能确定是谁。

举个例子:传统MVC模式中,View是面向用户的视图,它们通常对Controller进行响应,而Controller则依赖Model来获取状态和数据,最后对View进行调用。在这个过程中,View是观察者,Model是主题。

二、优缺点

观察者模式有以下优点:

1. 观察者和被观察者之间建立了一个抽象耦合;

2. 观察者模式支持广播通信;

3. 观察者模式符合“开闭原则”,可以在不修改代码的情况下增加新的观察者和主题;

4. 观察者模式增加了程序的可重用性。

观察者模式也有一些缺点:

1. 如果一个观察者对象需要了解所有主题的通知,这个对象可能需要存储所有主题对象的引用;

2. 观察者模式没有处理执行顺序的机制,导致不同的观察者接收到通知的顺序可能是不同的。

三、具体实现

在JDK中,观察者模式主要涉及以下两个类:Observer和Observable。其中,Observer是接口,用于表示观察者,而Observable则是一个类,用于表示主题。

具体步骤如下:

1. 定义一个Observable类,然后在需要通知观察者的时候,就调用Observable类的setChanged()和notifyObservers()方法即可。

```java

public class MyObservable extends java.util.Observable {

private String name;

public MyObservable(String name) {

this.name = name;

}

public void updateName(String name) {

this.name = name;

setChanged();

notifyObservers(name);

}

}

```

2. 定义一个Observer接口,然后让实现它的所有类实现update()方法,这个方法用于在主题状态改变的时候更新状态。

```java

public class MyObserver implements java.util.Observer {

@Override

public void update(java.util.Observable o, Object arg) {

String name = (String) arg;

System.out.println("Observe name changed to " + name);

}

}

```

3. 在需要的地方,使用addObserver()方法将观察者添加到主题列表中。

```java

MyObservable observable = new MyObservable("Tom");

MyObserver observer = new MyObserver();

observable.addObserver(observer);

```

4. 当需要通知观察者时,直接调用updateName()方法即可。

```java

observable.updateName("Jerry");

```

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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