JAVA观察者模式(买彩票案例)

定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。

源码地址:https://gitee.com/yang-kairui/design-pattern
JAVA的JDK和很多框架都用到了观察者模式,最典型的比如说spring mvc中的DispatcherServelet以及Zookeeper的动态监控注册中心,感兴趣的话可以去阅读一下源码
在这里插入图片描述
如上图所示,服务号就是我们的主题,使用者就是观察者。现在我们明确下功能:

1、服务号就是主题,业务就是推送消息

2、观察者只需要订阅主题,只要有新的消息就会送来

3、当不想要此主题消息时,取消订阅

4、只要服务号还在,就会一直有人订阅

好了,现在我们来看看观察者模式的类图:
在这里插入图片描述

接下来就是代码时间了,我们模拟一个买彩票的场景,彩票站就是主题,买彩票的人就是观察者。

首先定义两个接口,主题接口Subject、订阅者接口Observer

/*** 所有的被观察主题需要实现该接口** @author ykr* @date 2022/3/31*/
public interface Subject {/*** 存储所有观察者* @return List<Observer>*/List<Observer> getObservers();/*** 注册一个观察者* @param observer 订阅的观察者对象*/void registerObserver(Observer observer);/*** 移除一个观察者* @param observer 订阅的观察者对象*/void removeObserver(Observer observer);/*** 通知所有观察者*/void notifyObservers();
}
/*** 所有订阅者需要实现该接口** @author ykr* @date 2022/3/31*/
public interface Observer {void update(String msg);
}

接下来实现一个彩票主题LotterySubject 和彩民订阅者LotteryHolders

/*** 彩票主题** @author ykr* @date 2022/3/31*/
public class LotterySubject implements Subject {/*** 所有买彩票的彩民*/private List<Observer> observers = new ArrayList<>();/*** 开奖号码*/private String msg;@Overridepublic List<Observer> getObservers() {return this.observers;}@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {int index = observers.indexOf(observer);if (index >= 0) {observers.remove(observer);}}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(msg);}}/*** 开奖*/public void lottery(String msg) {this.msg = msg;notifyObservers();}
}
/*** 持有彩票的人** @author ykr* @date 2022/3/31*/
public class LotteryHolders implements Observer {private String lottery;LotteryHolders(String lottery) {this.lottery = lottery;}@Overridepublic void update(String msg) {//开奖System.out.println("本期开奖号码:" + msg + ",我的号码:" + lottery);}
}

最后模拟买彩票案例LotteryTest

/*** 买彩票模拟** @author ykr* @date 2022/3/31*/
public class LotteryTest {public static void main(String[] args) {LotteryHolders li = new LotteryHolders(String.valueOf(new Random().nextInt(10)));LotteryHolders wang = new LotteryHolders(String.valueOf(new Random().nextInt(10)));LotteryHolders yang = new LotteryHolders(String.valueOf(new Random().nextInt(10)));LotterySubject lotteryStore = new LotterySubject();lotteryStore.registerObserver(li);lotteryStore.registerObserver(wang);lotteryStore.registerObserver(yang);lotteryStore.lottery("5");}
}

执行结果

本期开奖号码:5,我的号码:4 本期开奖号码:5,我的号码:9 本期开奖号码:5,我的号码:7

23种设计模式JAVA案例

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入密码提示格式错误信息

给密码设置提示信息&#xff1a; 输入密码之后&#xff0c;点击页面其他地方会提示密码信息&#xff0c;输入的密码不满足格式要求&#xff0c;则提示密码格式输入错误信息&#xff1b;满足要求则提示输入正确。 如图&#xff1a; 输入错误时&#xff1a; 输入正确&#xff…

登录失败,用户名或密码错误

在录入人员前选择录入设备&#xff1a;人证核验设备&#xff0c;提示登录失败&#xff0c;用户名或密码错误&#xff0c; 解决方法&#xff1a; 1、ping人证核验设备ip&#xff0c;看一下是否能正常通信&#xff0c;如果返回以下内容&#xff0c;代表通信正常。 2、按照以下操…

WordPress后台登录一直显示密码错误,但是密码是正确的。

这种情况&#xff0c;之前就出现过&#xff0c;我把浏览器数据清除之后&#xff0c;重新登录就会这样。明明邮箱或者是用户名都能对的上&#xff0c;甚至我去查了word press中的数据库账户&#xff0c;确定邮箱跟账户没问题&#xff0c;但是就是密码对不上&#xff0c;而且点击…

linux下mysql登陆时显示密码问题的错误

数据库的登录mysql -h localhost -u root -p 出现错误 使用命令&#xff1a;sudo mysql -u root -p 来设置密码 这就成功了 退出是ctrl d

输入密码显示星号

#include<stdio.h> #include<conio.h> #define max 20void input_password(char *password) {int i0;char c;printf("请输入您的密码(取前20位&#xff09;&#xff1a;\n");while((cgetch())!\r){if(c!\b){password[i] c;printf("*");}else{…

在登录页面中输入正确的信息还是显示用户名或密码错误

今天在做某马的Demo时遇到一个问题&#xff1a;数据库中正确的username&#xff0c;和password在页面上都输入正确后&#xff0c;提交表单时却显示用户名或密码错误&#xff0c;如图&#xff1a; 开始我认为时Dao层&#xff08;去数据库查找时&#xff09;出现了问题&#xff0…

通过关系网络进行欺诈检测和欺诈团伙发现

近年来搞金融诈骗的越来越厉害啦&#xff0c;除了团伙化、组织化的趋势&#xff0c;有的居然每个月还有固定的推广费呢。那么&#xff0c;如何从数据的角度去鉴别诈骗团伙呢&#xff1f;以下“朝阳35处”出品的这篇文章&#xff0c;介绍了如何利用关系网络&#xff0c;通过无监…

新的RA Group勒索软件针对美国组织进行双重勒索攻击

一个名为“RA Group”的新勒索软件组织针对美国和韩国的制药、保险、财富管理和制造公司。 新的勒索软件行动始于 2023 年 4 月&#xff0c;当时他们在暗网上启动了一个数据泄露站点&#xff0c;以发布受害者的详细信息和被盗数据&#xff0c;采用了大多数勒索软件团伙使用的典…

超千万安卓用户安装某诈骗APP、英国勒索软件攻击数量翻倍|10月27日全球网络安全热点

安全资讯报告 攻击者劫持Craigslist电子邮件传播恶意软件 Craigslist内部电子邮件系统本月被攻击者劫持以传递令人信服的消息&#xff0c;最终目的是避免Microsoft Office安全控制来传递恶意软件。 这些电子邮件从真实的Craigslist IP地址发送&#xff0c;通知用户他们发布的广…

深入诈骗团队

最近接到任务&#xff0c;调查一个诈骗团伙 上面有一个注册接口&#xff0c;直接先注册一个用户看看他们怎么诈骗的 好家伙&#xff0c;用户赚了8个亿&#xff0c;充值过的用户直呼内行。这种站点一看就是那种诈骗团伙的杀猪盘&#xff0c;使用的那种tp5的框架一键搭建&#xf…

【安全资讯】网络犯罪集团通过COVID-19诈骗等手段获利5500万美元

作者&#xff5c;星辰大海来源&#xff5c;嘶吼网发布时间&#xff5c;2021-02-24 美国执法部门逮捕了一家总部位于加纳的网络犯罪集团的6名 “头目”&#xff0c;据称他们最早曾在2013年就发起了一系列的金融诈骗骗局&#xff0c;其中包括恋爱诈骗、商业电子邮件泄露攻击等多种…

防不胜防,10分钟就被AI骗走430万!真实诈骗案震惊全网

来源&#xff1a;量子位 本文为2891字&#xff0c;建议阅读7分钟 本文介绍AI诈骗案件背后的技术和机制。 防不胜防&#xff0c;10分钟就被AI骗走430万&#xff01; 这是这两天震惊全网的真实诈骗案件。 据包头警方发布&#xff0c;一公司老板接到朋友的微信视频电话&#xff0c…

当诈骗团伙撞上网络安全研究员,会发生什么?

勤恳好学的小凯&#xff0c;工作之余报名了一个培训。 这天&#xff0c;他接到电话&#xff0c;对方说&#xff1a;因为疫情原因&#xff0c;培训不得不取消&#xff0c;现在我们正在统一退款给学员&#xff0c;麻烦你加一下我们的退款群&#xff0c;给你安排退款。 小凯心想…

记一次勒索病毒中招 (赎金已交)

从没想过自己会中勒索病毒 因为用电脑几十年, 自己也算比较懂电脑的, 使用习惯一直都很好 某天起床, 打开E盘, 一眼就发现自己中了勒索病毒 随即马上开始根据扩展名进行research, 看看有没有救 很容易能找到病毒名, 然后得到以下情报 1 很多网站会提供杀毒软件, 和数据恢复软件…

伊朗称以色列和美国可能是加油站网络攻击的幕后黑手、新型勒索软件或成为最大的新兴风险|11月1日全球网络安全热点

安全资讯报告 美国TrickBot恶意软件开发者或将面临60年监禁 一名据信是TrickBot恶意软件开发团队成员的俄罗斯国民已被引渡到美国&#xff0c;目前面临可能使他入狱60年的指控。 起诉书称&#xff0c;38岁的Vladimir Dunaev&#xff0c;也被称为FFX&#xff0c;是一名恶意软件开…

在其他国家被揭穿骗子又盯上非洲? 这几个骗子公司可把非洲人民坑苦了……...

来源 | Bitcoin 编译 | Guoxi 责编 | Carol 出品 | 区块链大本营&#xff08;blockchain_camp&#xff09; 网上有这么一句话来形容投资&#xff1a;“你看中的是别人的收益&#xff0c;别人看中的是你的本金。”的确&#xff0c;投资一直是一场富贵险中求的赌博&#xff0c;加…

当程序员遇上电信诈骗犯 黑掉对方电脑!成功反制

来源&#xff1a;站长之家 作者&#xff1a;站长之家 电信诈骗手段花样百出&#xff0c;让许多普通民众防不胜防。日前&#xff0c;一程序员遇上电信诈骗犯后&#xff0c;却机智设下陷阱&#xff0c;让诈骗分子栽了跟斗。不得不说这个程序员套路太深&#xff0c;下面就来一起看…

一个有趣的英文文献翻译工具——CopyTranslator

Github链接&#xff1a;https://github.com/elliottzheng/CopyTranslator/blob/master/README_zh.md 百度网盘下载地址&#xff1a;https://pan.baidu.com/s/1mySoacl-V6tGE2xCH79wyQ#list/path%2F 在做英文文献阅读过程中&#xff0c;有时候遇到长段文字难以去理解&#xff…

写论文时如何翻译外文文献?

搞科研就是集所有既有成果为大成者。 想要论文写得好&#xff0c;一定要有丰富的知识储备和对该领域专业技能的熟练掌握&#xff0c;这其中不可能少的了外文文献的知识储备。 外文文献的阅读十分重要。那么阅读的前提是什么呢&#xff1f;翻译&#xff01; 外文文献翻译是对…