本文最后更新于369 天前,其中的信息可能已经过时,如有错误请发送邮件到2192492965@qq.com
观察者模式
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式在很多场景中都非常有用,比如事件监听、状态更新等。
观察者模式基本概念
观察者模式包含两个主要角色:
- Subject(主题):维护一组观察者,提供添加、删除和通知观察者的接口。
- Observer(观察者):为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。
Java实现观察者模式
步骤 1: 定义Observer接口
在Java中,我们可以使用java.util.Observer接口来定义观察者,但为了更灵活地使用Lambda表达式,我们可以自定义一个接口。
@FunctionalInterface
public interface Observer {
void update(String message);
}
步骤 2: 定义Subject类
Subject类将维护观察者列表,并提供注册和注销观察者的方法,以及通知所有观察者的方法。
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
步骤 3: 使用Lambda表达式实现Observer
现在我们可以利用Lambda表达式来实现具体的观察者。
public class ConcreteObserver implements Observer {
@Override
public void update(String message) {
System.out.println("Received message: " + message);
}
}
或者直接使用Lambda表达式:
Observer observer = message -> System.out.println("Received message: " + message);
步骤 4: 测试观察者模式
最后,我们可以创建一个测试类来演示观察者模式的工作原理。
public class ObserverPatternTest {
public static void main(String[] args) {
Subject subject = new Subject();
Observer observer1 = message -> System.out.println("Observer 1: " + message);
Observer observer2 = message -> System.out.println("Observer 2: " + message);
subject.attach(observer1);
subject.attach(observer2);
subject.notifyObservers("Hello, Observers!");
}
}
输出结果
Observer 1: Hello, Observers!
Observer 2: Hello, Observers!
总结
通过上述步骤,我们可以看到如何利用Java 8的特性来实现观察者模式,从而在实际项目中更好地管理和维护对象之间的依赖关系。




