设计模式:生活中的观察者模式

想象你在社交媒体上关注(订阅)了一个名人或新闻频道(主题)。一旦他们发布新内容,所有关注者(观察者)都会收到通知。这个过程就很像观察者模式的工作原理。

生活场景类比

  1. 主题(Subject):社交媒体上的名人或新闻频道,他们发布更新并通知所有关注者。
  2. 观察者(Observer):关注名人或新闻频道的用户,他们希望得到更新通知。
  3. 订阅:用户关注名人或新闻频道的行为,相当于观察者注册到主题。
  4. 通知:当有新内容发布时,社交媒体平台通知所有关注者,这一过程对应于主题状态改变时通知所有观察者。
  5. 取消订阅:用户取消关注,相当于观察者从主题注销。

设计模式解析

在这个类比中,社交媒体平台的后台系统就像是观察者模式中的框架,它允许用户(观察者)订阅他们感兴趣的内容源(主题)。主题不需要知道谁关注了它们,它们只需要在更新时将消息发送给社交媒体平台,平台则负责将这些更新分发给所有关注者。

代码实现类比

如果我们把这个类比转换成代码,那么可以这样来实现:

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

// 社交媒体名人类
class Celebrity {
    private List<Follower> followers = new ArrayList<>();
    private String name;

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

    public void postNewContent(String content) {
        System.out.println(name + " posted: " + content);
        notifyFollowers(content);
    }

    public void addFollower(Follower follower) {
        followers.add(follower);
    }

    public void removeFollower(Follower follower) {
        followers.remove(follower);
    }

    private void notifyFollowers(String content) {
        for (Follower follower : followers) {
            follower.update(content);
        }
    }
}

// 具体观察者
class User implements Follower {
    private String username;

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

    @Override
    public void update(String message) {
        System.out.println(username + " received an update: " + message);
    }
}

// 客户端代码
public class SocialMediaExample {
    public static void main(String[] args) {
        Celebrity celebrity = new Celebrity("The Rock");
        User user1 = new User("Alice");
        User user2 = new User("Bob");

        celebrity.addFollower(user1);
        celebrity.addFollower(user2);

        celebrity.postNewContent("Excited to share my new movie trailer with you all!");

        celebrity.removeFollower(user1);

        celebrity.postNewContent("Launching my new fitness brand soon!");
    }
}

类比总结

通过社交媒体关注机制的类比,我们可以更深入地理解观察者模式:

  • 动态订阅与取消订阅:用户可以随时开始或停止关注,类似于在观察者模式中动态添加和删除观察者。
  • 解耦:名人无需知道具体有哪些用户关注他们,只需发布更新即可,这与观察者模式中主题和观察者之间的解耦相对应。
  • 广播通知:社交媒体平台负责将更新广播给所有关注者,就像主题在其状态改变时通知所有观察者一样。

观察者模式强调了对象间的动态关系和通信,以及如何将状态的变化通知给一组可能感兴趣的其他对象。

相关推荐

  1. 设计模式生活观察模式

    2024-04-07 14:34:01       44 阅读
  2. 设计模式观察模式

    2024-04-07 14:34:01       64 阅读
  3. 设计模式观察模式

    2024-04-07 14:34:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 14:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 14:34:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 14:34:01       82 阅读
  4. Python语言-面向对象

    2024-04-07 14:34:01       91 阅读

热门阅读

  1. Spring相关实战

    2024-04-07 14:34:01       29 阅读
  2. Flutter Engine引擎概念

    2024-04-07 14:34:01       41 阅读
  3. HOW - 前端国际化之多语言通用方案

    2024-04-07 14:34:01       37 阅读
  4. 「 网络安全常用术语解读 」同源策略SOP详解

    2024-04-07 14:34:01       35 阅读
  5. Openstack(T)部署ceph集群 ceph-14.2.22-nautilus

    2024-04-07 14:34:01       34 阅读
  6. WPF中嵌入3D模型通用结构

    2024-04-07 14:34:01       34 阅读
  7. 【2023年软考架构师】案例真题回忆版

    2024-04-07 14:34:01       34 阅读
  8. vite配置postcss

    2024-04-07 14:34:01       35 阅读
  9. AI创业蓝海:十大领域解锁未来商机

    2024-04-07 14:34:01       30 阅读
  10. docker用来解决什么问题

    2024-04-07 14:34:01       40 阅读
  11. vue3项目中使用getCurrentInstance获取实例和dom的问题

    2024-04-07 14:34:01       27 阅读
  12. Linux 系统调用

    2024-04-07 14:34:01       35 阅读
  13. 前2个月湖南外贸进出口总值810.6亿元

    2024-04-07 14:34:01       35 阅读