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

观察者模式java代码怎么写

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

观察者模式(Observer Pattern)是一种常见的设计模式,用于在对象之间建立一对多的依赖关系,当一个对象的状态发生变化时,其所有依赖对象都会收到通知并自动更新。该模式优雅地解决了对象之间复杂的耦合关系问题,使得系统更具有扩展性和灵活性。本文将从多个角度分析观察者模式的实现和应用。

一、模式结构

观察者模式由 Subject、Observer 和 ConcreteObserver 三个角色组成。其中 Subject 一般具有注册和移除 Observer 对象的方法,它可以监测到自己的状态变化并通知 Observer 对象。Observer 是一个接口,定义了接收通知和更新自身状态的方法。ConcreteObserver 是具体观察者,实现了 Observer 接口并定义了自己的更新逻辑。

二、代码实现

在 Java 中实现观察者模式,可以定义一个抽象主题类(Subject),其中包含了添加、删除和通知观察者对象的方法。定义一个抽象观察者接口(Observer),其中包含了接收与主题相关的通知方法。具体主题类(ConcreteSubject)继承抽象主题类并实现自己的业务逻辑;具体观察者类(ConcreteObserver)实现抽象观察者接口并对通知进行反应。

代码示例如下:

```java

// 抽象主题类

public abstract class Subject {

private List observers = new ArrayList<>();

public void addObserver(Observer observer) {

observers.add(observer);

}

public void removeObserver(Observer observer) {

observers.remove(observer);

}

public void notifyObservers() {

for (Observer observer : observers) {

observer.update();

}

}

}

// 抽象观察者接口

public interface Observer {

void update();

}

// 具体主题类

public class ConcreteSubject extends Subject {

private String state;

public String getState() {

return state;

}

public void setState(String state) {

this.state = state;

notifyObservers();

}

}

// 具体观察者类

public class ConcreteObserver implements Observer {

private String name;

public ConcreteObserver(String name) {

this.name = name;

}

@Override

public void update() {

System.out.println(name + " has received the update");

}

}

// 测试类

public class Test {

public static void main(String[] args) {

ConcreteSubject subject = new ConcreteSubject();

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

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

subject.addObserver(observer1);

subject.addObserver(observer2);

subject.setState("Ready to update.");

}

}

```

三、应用场景

观察者模式适用于许多场景,包括但不限于:

1. 事件驱动系统。当用户交互或其他事件发生时,通知多个不同的对象,使它们能够做出相应的动作。

2. GUI 设计。Swing 框架中的许多组件都使用观察者模式,当组件状态发生变化时,多个监听器对象都会得到通知并响应。

3. 订阅和发布系统。一个发布者可以向许多订阅者广播新信息,并实时发布最新数据。

四、优缺点

观察者模式的优点在于:

1. 降低对象之间的耦合性。观察者模式使得主题和观察者之间的依赖关系降低到最小程度,主题只需要维护一个 Observer 列表即可。

2. 主题和观察者之间是松散耦合的关系。这种松散耦合的关系使得主题和观察者之间可以单独修改和扩展,而不影响对方的正常运行。

3. 容易实现。观察者模式的实现非常简单,代码的复杂度不高,易于理解和维护。

观察者模式的缺点在于:

1. 使用观察者模式会增加系统中实体类的数量。

2. 观察者模式涉及动态绑定操作,开销较大。

3. 如果观察者过多,会导致主题通知时间变长,影响系统的性能。

五、结论

观察者模式是一种非常常用的设计模式,用于实现对象之间松散耦合的关系,提高系统的扩展性和灵活性。在 Java 中,通过定义一个抽象主题类和抽象观察者接口,以及一些具体的实现类,即可方便地实现观察者模式。在实际应用中,观察者模式适用于许多场合,具体包括事件驱动系统、GUI 设计和订阅和发布系统等。应当注意观察者过多可能导致通知时间增长,因此需要做好系统性能优化。总之,观察者模式是一种非常优秀的设计模式,在软件开发中有着广泛的应用。

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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