观察者

81 阅读1分钟

观察者模式(Observer Pattern)是一种行为型模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并进行相应处理。

观察者模式的主要角色如下:

  • 主题(Subject):也称为被观察者或可观察者,它是具有状态的对象,并维护着一个观察者列表。
  • 观察者(Observer):观察者是接收主题通知的对象。

观察者模式的实现如下:

// 主题
public class Subject {
  private List<Observer> observers = new ArrayList<>();

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

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

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

// 观察者
public interface Observer {
  void update();
}

// 具体观察者
public class ConcreteObserver implements Observer {
  @Override
  public void update() {
    System.out.println("观察者收到通知");
  }
}

public class Main {
  public static void main(String[] args) {
    // 创建主题
    Subject subject = new Subject();

    // 创建观察者
    Observer observer1 = new ConcreteObserver();
    Observer observer2 = new ConcreteObserver();

    // 将观察者添加到主题中
    subject.addObserver(observer1);
    subject.addObserver(observer2);

    // 改变主题的状态
    subject.notifyObservers();
  }
}

输出:

观察者收到通知
观察者收到通知

观察者模式的优点如下:

  • 解耦了主题和观察者,使它们可以独立变化。
  • 提高了系统的灵活性和扩展性。

观察者模式的应用场景如下:

  • 在系统中存在多个对象相互依赖时。
  • 需要动态地添加或删除观察者时。
  • 需要提高系统的灵活性和扩展性时。

观察者模式的注意事项如下:

  • 主题和观察者之间应该采用弱引用,以避免内存泄漏。
  • 主题应该提供一个清除观察者的方法,以便在不需要观察者时可以进行清除。