【Java设计者模式】-Java实现订阅-发布者模式
发布日期:2021-06-29 15:36:29
浏览次数:3
分类:技术文章
本文共 2159 字,大约阅读时间需要 7 分钟。
【Java设计者模式】-Java实现订阅-发布者模式
主要由发布者和订阅者两种构成。消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。
订阅者接口
package com.lcz.design_mode;// 订阅者接口public interface ISubsriber { // 订阅者得到这个消息各自的处理 void todoTomorrow(String msg);}
发布者接口
package com.lcz.design_mode;// 发布者接口public interface IWeather { // 添加订阅者 void addSubscriber(ISubsriber subsriber); // 删除订阅者 void delSubscriber(ISubsriber subsriber); // 发布消息的接口 void publishInfo(String msg);}
发布者的实现
package com.lcz.design_mode;import java.util.ArrayList;import java.util.List;import com.sun.istack.internal.logging.Logger;// 实现发布者public class WeatherServer implements IWeather { // 日志记录 private static final Logger logger = Logger.getLogger(WeatherServer.class); // 保存发布者 private Listsubsribers = new ArrayList (); // 保存所有的订阅者 @Override public void addSubscriber(ISubsriber subsriber) { // TODO Auto-generated method stub subsribers.add(subsriber); logger.info("a new subscriber is joining"); } // 用来删除发布者 @Override public void delSubscriber(ISubsriber subsriber) { // TODO Auto-generated method stub subsribers.remove(subsriber); logger.info("a subscriber is leaving"); } // 用来发布消息 @Override public void publishInfo(String msg) { // TODO Auto-generated method stub for(ISubsriber subsriber:subsribers) { subsriber.todoTomorrow(msg); } logger.info(String.format("public a msg: %s", msg)); }}
订阅者的实现
package com.lcz.design_mode;import com.sun.istack.internal.logging.Logger;public class Worker implements ISubsriber{ // 日志 private static final Logger logger = Logger.getLogger(Worker.class); @Override public void todoTomorrow(String msg) { // TODO Auto-generated method stub if("rain".equals(msg)) { logger.info("worker: a satified day"); }else if("sunny".equals(msg)) { logger.info("worker: a terrible day"); }else { logger.info("worker: spam messages"); } }}
测试
package com.lcz.design_mode;public class Test { public static void main(String[] args) { // 创建订阅者 Worker worker = new Worker(); WeatherServer weatherServer = new WeatherServer(); weatherServer.addSubscriber(worker); weatherServer.publishInfo("rain"); }}
转载地址:https://codingchaozhang.blog.csdn.net/article/details/115802109 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月19日 02时36分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
写论文,这个神器不能少!
2019-04-29
我在哥大读博的五年,万字总结
2019-04-29
本科、硕士、博士,究竟有何区别?
2019-04-29
如果我的实验室也这样布置,那多好。
2019-04-29
现在做硬件工程师还有前途吗?
2019-04-29
用 50 种编程语言写“Hello,World!”
2019-04-29
GD32替换STM32,这些细节一定要知道。
2019-04-29
华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由!
2019-04-29
春晚上的“拓荒牛”
2019-04-29
嵌入式驱动自学者的亲身感受,有什么建议?
2019-04-29
华为被超越!这家公司成中国最大智能手机制造商,不是小米!
2019-04-29
腾讯机器狗,站起来了!
2019-04-29
我用自己创造的深度学习框架进入腾讯,爽!
2019-04-29
芯片为什么持续缺货?
2019-04-29
又涨了?2021 年 3 月程序员工资统计新出炉
2019-04-29
初入行的C++程序员,如何快速摆脱CRUD阶段?
2019-04-29
研究生跟了一个很棒的导师是种怎样的体验?
2019-04-29
学会扶墙的机器人:没有什么能让我倒下!
2019-04-29
美国无人机在火星首飞成功,创造历史,3米飞行高度悬停30秒
2019-04-29
单片机的几种数字滤波算法
2019-04-29