观察者模式Java示例代码

复制代码
import java.util.ArrayList;
import java.util.List;

// 观察者接口
interface Observer {
    void update(String message);
}

// 具体观察者
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);
    }
}

// 被观察者
class Subject {
    private List<Observer> observers = new ArrayList<>();

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

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

    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}
// 使用示例
public class Main {
    public static void main(String[] args) {
        Subject subject = new Subject();

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

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

        // 发送通知
        subject.notifyObservers("Hello, Observers!");
    }
}

Subject是被观察的对象,Observer是观察者。当Subject的状态发生改变时,它会通知所有注册的Observer

相关推荐
我登哥MVP3 分钟前
走进 Gang of Four 设计模式:解释器模式
java·设计模式·解释器模式
智码看视界4 分钟前
Tomcat架构深度拆解:Connector和Container到底怎么配合的?
java·servlet·架构·tomcat·web服务器
浪客川4 分钟前
idea 技巧 region 的使用
java·ide·intellij-idea
geovindu11 分钟前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法
dsyyyyy110115 分钟前
用JavaScript实现排序算法
开发语言·javascript·排序算法
CHANG_THE_WORLD25 分钟前
逐层拆解:C++ 虚函数从对象内存到手工调用的完整过程
java·开发语言·c++
我登哥MVP26 分钟前
走进 Gang of Four 设计模式:过滤器模式
java·设计模式·过滤器模式
Scott9999HH28 分钟前
2026 避坑实录:国产品牌压力变送器什么牌子好?从硬件抗扰到 C++ Qt 实时曲线绘制源码剖析
开发语言·c++·qt
吃饱了得干活34 分钟前
实时弹幕应该怎么搞?一篇带你从入门到生产级实战
java·后端
geats人山人海43 分钟前
c# 第八章 多态与案例
开发语言·c#