婚纱照网站制作,梁山网站建设价格,wordpress未登录跳转,网站制作哪种好想象你在社交媒体上关注#xff08;订阅#xff09;了一个名人或新闻频道#xff08;主题#xff09;。一旦他们发布新内容#xff0c;所有关注者#xff08;观察者#xff09;都会收到通知。这个过程就很像观察者模式的工作原理。
生活场景类比
主题#xff08;Subj…想象你在社交媒体上关注订阅了一个名人或新闻频道主题。一旦他们发布新内容所有关注者观察者都会收到通知。这个过程就很像观察者模式的工作原理。
生活场景类比
主题Subject社交媒体上的名人或新闻频道他们发布更新并通知所有关注者。观察者Observer关注名人或新闻频道的用户他们希望得到更新通知。订阅用户关注名人或新闻频道的行为相当于观察者注册到主题。通知当有新内容发布时社交媒体平台通知所有关注者这一过程对应于主题状态改变时通知所有观察者。取消订阅用户取消关注相当于观察者从主题注销。
设计模式解析
在这个类比中社交媒体平台的后台系统就像是观察者模式中的框架它允许用户观察者订阅他们感兴趣的内容源主题。主题不需要知道谁关注了它们它们只需要在更新时将消息发送给社交媒体平台平台则负责将这些更新分发给所有关注者。
代码实现类比
如果我们把这个类比转换成代码那么可以这样来实现
// 观察者接口
interface Follower {void update(String message);
}// 社交媒体名人类
class Celebrity {private ListFollower 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;}Overridepublic 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!);}
}类比总结
通过社交媒体关注机制的类比我们可以更深入地理解观察者模式
动态订阅与取消订阅用户可以随时开始或停止关注类似于在观察者模式中动态添加和删除观察者。解耦名人无需知道具体有哪些用户关注他们只需发布更新即可这与观察者模式中主题和观察者之间的解耦相对应。广播通知社交媒体平台负责将更新广播给所有关注者就像主题在其状态改变时通知所有观察者一样。
观察者模式强调了对象间的动态关系和通信以及如何将状态的变化通知给一组可能感兴趣的其他对象。