设计模式之观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。

核心概念

  • Subject(主题): 被观察的对象,它知道观察者,并提供注册、注销和通知观察者的接口。
  • Observer(观察者): 观察者对象,它需要知道主题,并定义更新接口。
  • ConcreteSubject(具体主题): 实现Subject接口,它负责存储观察者列表,并通知观察者。
  • ConcreteObserver(具体观察者): 实现Observer接口,它定义了当主题状态发生变化时的更新方法。

代码示例

// Subject接口
public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

// ConcreteSubject类
public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private int state;

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(this);
        }
    }

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }

    public int getState() {
        return state;
    }
}

// Observer接口
public interface Observer {
    void update(Subject subject);
}

// ConcreteObserver类
public class ConcreteObserver implements Observer {
    private int observerState;

    @Override
    public void update(Subject subject) {
        observerState = ((ConcreteSubject) subject).getState();
        System.out.println("Observer state updated to: " + observerState);
    }
}

应用场景

  • 当一个对象的状态发生变化时,需要自动通知其他对象。
  • 当一个对象的行为需要触发一系列相关行为时。
  • 当需要实现一个观察者列表,并对其进行管理时。

扩展阅读

更多设计模式的内容,请访问设计模式教程

Observer Pattern