首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >设计模式之观察者设计模式

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

作者头像
贺公子之数据科学与艺术
发布2025-08-29 11:05:29
发布2025-08-29 11:05:29
2700
举报
在这里插入图片描述
在这里插入图片描述

观察者的定义

指能够感知、观察和注意到某些事物或现象的个体或实体。观察者可以是人类、动物、科学仪器、传感器、摄像机等。观察者通过判断、记录和分析所观察到的事物或现象,可以获取和获取关于该事物或现象的信息和知识。观察者在科学研究、实验、观测、监测、社会研究等领域中起着重要的作用。观察者的定义是指能够感知、观察和注意到某些事物或现象的个体或实体。观察者可以是人类、动物、科学仪器、传感器、摄像机等。观察者通过判断、记录和分析所观察到的事物或现象,可以获取和获取关于该事物或现象的信息和知识。观察者在科学研究、实验、观测、监测、社会研究等领域中起着重要的作用。

观察者设计模式是一种行为型设计模式,用于当一个对象的状态发生改变时,其相关依赖对象能够收到通知并进行相应的操作。下面是一个使用Java语言实现观察者设计模式的示例:

首先,我们需要定义一个观察者接口,用于定义观察者对象的行为:

代码语言:javascript
复制
public interface Observer {
    void update(String message);
}

然后,我们定义一个主题接口,用于定义主题对象的行为:

代码语言:javascript
复制
public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

接下来,我们实现上述接口,定义一个具体的主题类:

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

public class ConcreteSubject implements Subject {
    private List<Observer> observers;
    private String message;

    public ConcreteSubject() {
        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() {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }

    public void setMessage(String message) {
        this.message = message;
        notifyObservers();
    }
}

最后,我们实现观察者接口,定义一个具体的观察者类:

代码语言:javascript
复制
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);
    }
}

使用示例:

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();

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

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

        subject.setMessage("Hello, observers!");
    }
}

运行结果:

代码语言:javascript
复制
Observer 1 received message: Hello, observers!
Observer 2 received message: Hello, observers!
Observer 3 received message: Hello, observers!

在上述示例中,ConcreteSubject作为主题对象,ConcreteObserver作为观察者对象。当主题对象的setMessage方法被调用时,它会通知所有注册的观察者对象,观察者对象接收到通知后会执行相应的操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 观察者的定义
  • 首先,我们需要定义一个观察者接口,用于定义观察者对象的行为:
  • 然后,我们定义一个主题接口,用于定义主题对象的行为:
  • 接下来,我们实现上述接口,定义一个具体的主题类:
  • 最后,我们实现观察者接口,定义一个具体的观察者类:
  • 使用示例:
  • 运行结果:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档