软考
APP下载

手写观察者模式

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

实现观察者模式需要定义两个角色: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");

}

```

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库