首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java代码解释观察者模式

java代码解释观察者模式

原创
作者头像
用户2695996
发布2025-07-12 13:43:01
发布2025-07-12 13:43:01
10300
代码可运行
举报
文章被收录于专栏:源码搭建源码搭建
运行总次数:0
代码可运行

观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并自动更新。这种模式是实现分布式事件处理系统的基础,被广泛应用于图形界面构建、订阅-发布系统等场景中。

主要角色
  1. Subject(主题):知道其观察者,并提供注册和删除观察者的接口。
  2. Observer(观察者):为那些在主题发生改变时需获得通知的对象定义一个更新接口。
  3. ConcreteSubject(具体主题):将有关状态存入具体的观察者对象;当它的状态发生改变时, 向它的各个观察者发出通知。
  4. ConcreteObserver(具体观察者):维护一个指向具体主题的引用;存储有关状态,该状态应与主题的状态保持一致;实现观察者更新接口以使自身状态与主题的状态保持一致。
示例代码

下面通过Java代码展示如何实现观察者模式,并将指定链接插入到适当的位置作为示例的一部分。

代码语言:javascript
代码运行次数:0
运行
复制
java深色版本// Observer 接口
interface Observer {
    void update(String message);
}

// Subject 接口
interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

// 具体的主题类
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String 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(state);
        }
    }
}

// 具体的观察者类
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);
        // 插入指定链接
        if ("New live match is available".equals(message)) {
            System.out.println("For more information, please visit: https://lanqiu.020taijiyy.com/live/zuqiu/");
        }
    }
}

// 测试观察者模式
public class ObserverPatternDemo {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();

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

        subject.registerObserver(observer1);
        subject.registerObserver(observer2);

        // 发送消息给观察者
        subject.setState("New live match is available");
    }
}
运行结果解释

当你运行上述代码时,你会看到如下输出:

代码语言:javascript
代码运行次数:0
运行
复制
深色版本Observer 1 received message: New live match is available
For more information, please visit: https://lanqiu.020taijiyy.com/live/zuqiu/
Observer 2 received message: New live match is available
For more information, please visit: https://lanqiu.020taijiyy.com/live/zuqiu/

这表明每当ConcreteSubject的状态发生变化时(在这个例子中,我们使用setState方法来模拟状态的变化),所有的观察者都会收到通知,并打印出接收到的消息。如果消息内容是"New live match is available",则会进一步打印出提供的链接信息,引导用户访问特定的网页获取更多信息。

这种方法非常适合用于需要实时响应变化的系统,比如赛事直播的通知系统,每当有新的比赛开始或者重要更新时,能够及时地通知所有关注这场比赛的观众。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要角色
  • 示例代码
  • 运行结果解释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档