温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

新手怎么学观察者模式

发布时间:2026-07-18 16:06:43 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

观察者模式(Observer Pattern)是设计模式中最常用、最适合入门的模式之一,尤其适合新手学习。下面我用通俗解释 + 小例子 + 学习步骤来帮你快速上手。


一、一句话理解观察者模式

一个对象状态发生变化,自动通知所有依赖它的对象。

也可以理解为:

“我变了,你们自己看着办。”


二、生活中的例子(先别看代码)

例子 1:微信公众号

  • 公众号 = 被观察者(Subject)
  • 粉丝 = 观察者(Observer)
  • 公众号发文章 → 所有粉丝收到通知

例子 2:天气预报

  • 气象站更新温度
  • 手机 App、网站、公告屏 自动更新

三、观察者模式的结构(核心角色)

1️⃣ 抽象被观察者(Subject)

  • 维护观察者列表
  • 提供:
    • 添加观察者
    • 删除观察者
    • 通知观察者

2️⃣ 抽象观察者(Observer)

  • 定义一个更新方法

3️⃣ 具体被观察者

  • 状态变化时,调用通知方法

4️⃣ 具体观察者

  • 实现更新逻辑

四、用 Java 写一个简单的例子(新手友好)

1️⃣ 观察者接口

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

2️⃣ 被观察者接口

import java.util.*;

public interface Subject {
    void addObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObservers();
}

3️⃣ 具体被观察者

public class NewsPublisher implements Subject {

    private List<Observer> observers = new ArrayList<>();
    private String news;

    public void setNews(String news) {
        this.news = news;
        notifyObservers();
    }

    @Override
    public void addObserver(Observer o) {
        observers.add(o);
    }

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

    @Override
    public void notifyObservers() {
        for (Observer o : observers) {
            o.update(news);
        }
    }
}

4️⃣ 具体观察者

public class User implements Observer {

    private String name;

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

    @Override
    public void update(String message) {
        System.out.println(name + " 收到新闻:" + message);
    }
}

5️⃣ 测试代码

public class Main {
    public static void main(String[] args) {
        NewsPublisher publisher = new NewsPublisher();

        Observer user1 = new User("小明");
        Observer user2 = new User("小红");

        publisher.addObserver(user1);
        publisher.addObserver(user2);

        publisher.setNews("今天天气很好!");
    }
}

✅ 输出:

小明 收到新闻:今天天气很好!
小红 收到新闻:今天天气很好!

五、新手学习建议(非常重要)

✅ 学习顺序

  1. 先理解“谁通知谁”
  2. 画一张角色关系图
  3. 自己手写一遍
  4. 对比 Java 内置 Observer / Listener

六、常见误区

❌ 把观察者模式当成“消息队列”
✅ 它只是同步通知

❌ 观察者里写太多逻辑
✅ 观察者只负责响应

❌ 被观察者直接依赖具体观察者
✅ 面向接口编程


七、现实中的观察者模式

场景 说明
GUI 事件 按钮点击
Spring 事件 ApplicationEvent
Vue / React 数据变化 → 视图更新
MQ 高级版观察者

八、新手练习建议

✅ 做一个 温度监控模拟

  • 温度改变
  • 显示面板、报警系统自动更新

✅ 用 接口 + List 自己实现一遍


如果你愿意,我可以:

  • ✅ 用 Python / JavaScript 再讲一遍
  • ✅ 用 Spring 事件机制 对照讲解
  • ✅ 帮你画一张 UML 图

你更想从哪种方式继续学?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI