侧边栏壁纸
  • 累计撰写 52 篇文章
  • 累计创建 22 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

观察者模式(Observer Pattern)

镇沛
2024-09-30 / 0 评论 / 0 点赞 / 10 阅读 / 0 字

概述

观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件处理系统、实时更新用户界面以及在分布式环境中传递消息等场景。

目的

  • 解耦:观察者模式使得被观察的对象(主题)和观察者之间保持松耦合,两者可以独立地发展而不会相互影响。

  • 灵活性:可以轻松添加或移除观察者,使得系统易于扩展。

  • 响应式:能够自动地将对象状态的变化通知给所有感兴趣的观察者,提高了系统的响应速度和可交互性。

角色

1. Subject(主题/被观察者)

  • 定义了添加和删除观察者的方法。

  • 提供一个通知所有观察者的接口。

2. Observer(观察者)

  • 定义了一个更新自己的接口,当主题状态发生变化时会被调用。

  • 观察者可以是具体的类或接口,具体取决于实现方式。

3. ConcreteSubject(具体主题)

  • 维护状态,并在状态变化时通知所有已注册的观察者。

  • 是Subject的实现类。

4. ConcreteObserver(具体观察者)

  • 实现Observer接口,提供具体的更新操作实现。

  • 每个ConcreteObserver都关注ConcreteSubject的特定变化,并做出相应处理。

示例代码

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 String state;

    public String getState() {
        return state;
    }

    public void setState(String 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(this.state);
        }
    }
}

Observer接口

public interface Observer {
    void update(String state);
}

ConcreteObserver类

public class ConcreteObserver implements Observer {
    private String name;
    
    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String state) {
        System.out.println(name + " received update: " + state);
    }
}

应用场景

  • 用户界面更新:当后台数据发生变化时,自动更新UI显示。

  • 事件监听:如按钮点击、鼠标移动等事件的处理。

  • 订阅-发布系统:如RSS订阅、邮件通知等。

  • 模型-视图-控制器(MVC)框架中的视图更新。

总结

观察者模式通过定义对象间一对多的依赖关系,实现了对象状态的自动传播,增强了软件的灵活性和可维护性。它在需要实现消息的广播、事件的处理或是实现动态联动的场景中尤为重要。然而,也需要注意控制观察者数量,避免在大量观察者情况下导致的性能问题。

0

评论区