设计模式——观察者模式Observer

news/2024/4/27 12:30:16

Q:观察者模式属于哪一类设计模式

A:观察者模式属于行为学模式

Q:什么是观察者模式

A:当一个对象的状态发生改变时,所有依赖它的对象都得到通知,并自动更新

观察者模式解析:报纸类维护了一个订阅者数组,我们可以通过报纸类遍历订阅者数组来通知所有订阅者

订阅者类

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

订阅者实现类

public class SubscriberImpl implements Subscriber {private String name;@Overridepublic void update(String message) {System.out.println(name + "---接收到消息:" + message);}
}

报纸类

public interface NewsPaper {void addSubscriber(Subscriber subscriber);//添加订阅者void removeSubscriber(Subscriber subscriber);//移除订阅者void notifySubscriber(String message);//通知订阅者
}

报纸实现类

public class NewsPaperImpl implements NewsPaper {private List<Subscriber> subscribers = new ArrayList<>();@Overridepublic void addSubscriber(Subscriber subscriber) { subscribers.add(subscriber); }@Overridepublic void removeSubscriber(Subscriber subscriber) { subscribers.remove(subscriber); }@Overridepublic void notifySubscriber(String message) {for (Subscriber s : subscribers) {s.update(message);}}
}

演示类

public class Demo {public static void main(String[] args) {NewsPaperImpl newsPaper = new NewsPaperImpl();SubscriberImpl subscriber1 = new SubscriberImpl("李老头");SubscriberImpl subscriber2 = new SubscriberImpl("王奶奶");newsPaper.addSubscriber(subscriber1);newsPaper.addSubscriber(subscriber2);newsPaper.notifySubscriber("今天的报纸收到了!");newsPaper.removeSubscriber(subscriber1);newsPaper.notifySubscriber("明天的报纸还是这个点到!");}
}

演示结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

如何使用极狐GitLab 自定义 Pages 根域名

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了极狐GitLab Pages …

html页面使用@for(){},@if(){},利用jquery 获取当前class在列表中的下标

基于以前的项目进行修改优化&#xff0c;前端代码根据List元素在html里进行遍历显示 原先的代码&#xff1a; 其中&#xff0c;noticeGuide.Id是标识noticeGuide的唯一值&#xff0c;但是不是从0开始的【是数据库自增字段】 但是在页面初始化加载的时候&#xff0c;我们只想…

蓝桥杯刷题之路径之谜

题目来源 路径之谜 不愧是国赛的题目 题意 题目中会给你两个数组&#xff0c;我这里是分别用row和col来表示 每走一步&#xff0c;往左边和上边射一箭&#xff0c;走到终点的时候row数组和col数组中的值必须全部等于0这个注意哈&#xff0c;看题目看了半天&#xff0c;因为…

第十二届蓝桥杯省赛CC++ 研究生组-卡片

solution1 直接依次计算&#xff0c;思维上最直接 #include<stdio.h> int main(){int a[10], n 1, t1, t2, flag 1;for(int i 0; i < 10; i)a[i] 2021;while(flag){t1 n;while(t1){t2 t1 % 10;a[t2]--;if(a[t2] < 0){flag 0;break;} t1 / 10;}if(!t1 &…

(三)Ribbon负载均衡

1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 1.2.源码跟踪 为什么我们只输入了service名称就可以访问了呢&#xff1f;之前还要获取ip和端口。 显然有人帮我们根据service名称&#xff0c;获取到了服务实例的ip和…

jetcache 2级缓存模式实现批量清除

需求 希望能够实现清理指定对象缓存的方法&#xff0c;例如缓存了User表&#xff0c;当User表巨大时&#xff0c;通过id全量去清理不现实&#xff0c;耗费资源也巨大。因此需要能够支持清理指定本地和远程缓存的批量方法。 分析 查看jetcache生成的cache接口&#xff0c;并没…