📅  最后修改于: 2023-12-03 14:57:21.943000             🧑  作者: Mango
观察者模式是一种经典的设计模式,也被称为发布-订阅模式。它允许对象之间保持松散的耦合关系,当一个对象状态发生变化时,所有依赖它的对象都会被通知并更新自己的状态。Java中的观察者模式通常使用Java.util包中的接口和类实现。
下面是观察者模式的UML类图:
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
public class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
private int state;
public void setState(int state) {
this.state = state;
notifyObservers();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(state);
}
}
}
public interface Observer {
void update(int state);
}
public class ConcreteObserver implements Observer {
private int state;
@Override
public void update(int state) {
this.state = state;
System.out.println("观察者状态更新:" + state);
}
}
以下是一个简单的示例,用于演示观察者模式在Java中的使用:
public class Client {
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver();
Observer observer2 = new ConcreteObserver();
subject.registerObserver(observer1);
subject.registerObserver(observer2);
((ConcreteSubject) subject).setState(1);
subject.removeObserver(observer2);
((ConcreteSubject) subject).setState(2);
}
}
输出:
观察者状态更新:1
观察者状态更新:1
观察者状态更新:2
观察者模式实现了对象间的解耦,通过抽象主题和抽象观察者,在一定程度上提高了系统的灵活性和可扩展性。在Java中,观察者模式的实现通常使用Java.util包中的接口和类,例如Observer和Observable类。因此,Java开发人员可以方便地使用观察者模式来实现可重用和灵活的代码。