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

手写观察者模式

希赛网 2024-06-06 18:16:09

观察者模式是一种行为设计模式,它用于在对象间建立一对多的依赖关系。在这个模式中,当一个对象改变状态时,它的所有依赖者都会自动收到通知并更新。观察者模式已经成为许多框架和库中常见的一种模式,但在本文中,我们将讨论如何手写观察者模式。

实现观察者模式需要定义两个角色:Subject(主题)和Observer(观察者)。主题是被观察的对象,而观察者是依赖于主题的对象,它们接收主题状态的变化。在手写观察者模式中,我们可以通过以下步骤实现:

1. 定义主题接口

我们首先需要定义一个主题接口,它定义了添加、删除和通知观察者的方法:

```

public interface Subject {

public void attach(Observer observer);

public void detach(Observer observer);

public void notifyObservers();

}

```

2. 实现主题类

我们需要实现主题类,它应该维护一个观察者列表,并在状态变化时通知观察者:

```

import java.util.ArrayList;

import java.util.List;

public class ConcreteSubject implements Subject {

private List observers = new ArrayList<>();

private String state;

public void attach(Observer observer) {

observers.add(observer);

}

public void detach(Observer observer) {

observers.remove(observer);

}

public void notifyObservers() {

for (Observer observer : observers) {

observer.update(state);

}

}

public void setState(String state) {

this.state = state;

notifyObservers();

}

}

```

3. 定义观察者接口

我们还需要定义一个观察者接口,它定义了更新状态的方法:

```

public interface Observer {

public void update(String state);

}

```

4. 实现观察者类

我们需要实现观察者类,它应该在主题状态变化时更新自己的状态:

```

public class ConcreteObserver implements Observer {

private String state;

public void update(String state) {

this.state = state;

System.out.println("State updated: " + state);

}

}

```

现在我们可以使用以下代码来测试我们的手写观察者模式:

```

public static void main(String[] args) {

Subject subject = new ConcreteSubject();

Observer observer1 = new ConcreteObserver();

Observer observer2 = new ConcreteObserver();

subject.attach(observer1);

subject.attach(observer2);

subject.setState("new state");

}

```

扫码咨询 领取资料


软考.png


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

软考资格查询系统

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