观察者模式是一种行为设计模式,它用于在对象间建立一对多的依赖关系。在这个模式中,当一个对象改变状态时,它的所有依赖者都会自动收到通知并更新。观察者模式已经成为许多框架和库中常见的一种模式,但在本文中,我们将讨论如何手写观察者模式。
实现观察者模式需要定义两个角色: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
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");
}
```
扫码咨询 领取资料