设计模式-行为型模式-观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。[DP]

复制代码
//首先是Observer接口,定义了观察者需要实现的更新方法:

public interface Observer {
    void update(String message);
}
//接着是Subject接口,定义了主题需要实现的注册、移除和通知观察者的方法:


public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String message);
}
//然后是实现Subject接口的ConcreteSubject类,它维护了一个观察者列表:

java
public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

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

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

    @Override
    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}
//接下来是实现Observer接口的ConcreteObserver类,它会在接收到通知时执行一些操作:


public class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received message: " + message);
    }
}
//最后是客户端代码,它创建主题和观察者,并演示了如何注册、通知和移除观察者:

public class ObserverPatternDemo {
    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();

        Observer observer1 = new ConcreteObserver("Observer 1");
        Observer observer2 = new ConcreteObserver("Observer 2");

        // 注册观察者
        subject.registerObserver(observer1);
        subject.registerObserver(observer2);

        // 通知观察者
        subject.notifyObservers("Hello, this is a test message!");

        // 移除观察者
        subject.removeObserver(observer1);

        // 再次通知,此时只有observer2会收到通知
        subject.notifyObservers("Another test message!");
    }
}
相关推荐
「QT(C++)开发工程师」4 小时前
C++设计模式
开发语言·c++·设计模式
茶本无香4 小时前
设计模式之七—装饰模式(Decorator Pattern)
java·设计模式·装饰器模式
漂洋过海的鱼儿16 小时前
设计模式——EIT构型(三)
java·网络·设计模式
老蒋每日coding1 天前
AI Agent 设计模式系列(十八)—— 安全模式
人工智能·安全·设计模式
老蒋每日coding1 天前
AI Agent 设计模式系列(十六)—— 资源感知优化设计模式
人工智能·设计模式·langchain
老蒋每日coding1 天前
AI Agent 设计模式系列(十七)—— 推理设计模式
人工智能·设计模式
冷崖1 天前
桥模式-结构型
c++·设计模式
连山齐名1 天前
设计模式之一——堵塞队列
设计模式
会员果汁1 天前
19.设计模式-命令模式
设计模式·命令模式
茶本无香1 天前
设计模式之六—组合模式:构建树形结构的艺术
java·设计模式·组合模式