Java学设计模式之观察者模式

一、观察者模式概念

1.1 什么是观察者模式

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

结构

观察者模式通常包含以下几个要素:

  1. Subject(主题): 维护一系列观察者对象,并提供方法来添加、删除和通知观察者对象。

  2. Observer(观察者): 定义一个更新接口,以便在主题状态发生变化时接收通知。

  3. ConcreteSubject(具体主题): 具体的主题对象,维护当前的状态,并在状态发生改变时通知其观察者。

  4. ConcreteObserver(具体观察者): 实现了观察者接口的具体观察者对象,当接收到主题的通知时进行相应的更新。

二、观察者模式代码

2.1 主题

public interface Subject {

    void registerObserver(Observer observer);

    void removeObserver(Observer observer);

    void notifyObservers();

}

2.2 具体主题

public class WeatherStation implements Subject {

    private List<Observer> observers = new ArrayList<>();

    private float temperature;

    public void setTemperature(float temperature) {
        this.temperature = temperature;
        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(temperature);
        }
    }
}

2.3 观察者

public interface Observer {
    void update(float temperature);
}

2.4 具体观察者

public class PhoneApp implements Observer{
    @Override
    public void update(float temperature) {
        System.out.println("手机App收到天气更新,当前温度:" + temperature);
    }
}
public class Website implements Observer{
    @Override
    public void update(float temperature) {
        System.out.println("网站收到天气更新,当前温度:" + temperature);
    }
}

2.5 测试类

public class ObserverPatternTest {
    public static void main(String[] args) {
        WeatherStation weatherStation = new WeatherStation();
        PhoneApp phoneApp = new PhoneApp();
        Website website = new Website();

        weatherStation.registerObserver(phoneApp);
        weatherStation.registerObserver(website);

        // 模拟天气更新
        weatherStation.setTemperature(25);
        // 输出:
        // 手机App收到天气更新,当前温度:25.0
        // 网站收到天气更新,当前温度:25.0
    }
}

三、总结

观察者模式的优点包括:

  • 主题和观察者之间的松耦合,使得它们可以独立地进行修改和扩展。
  • 支持广播通信,当一个主题状态改变时,所有依赖于它的观察者都会自动更新。

缺点包括:

  • 如果观察者太多或者通知频繁,可能会导致性能问题。
  • 如果观察者之间有复杂的依赖关系,可能会引起混乱和不易维护。
posted @ 2024-05-10 11:07  Kllin  阅读(11)  评论(0编辑  收藏  举报