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

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

生活场景类比

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

设计模式解析

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

代码实现类比

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

java 复制代码
// 观察者接口
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!");
    }
}

类比总结

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

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

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

相关推荐
晨米酱15 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机20 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机21 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤21 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式