【Java设计者模式】-Java实现订阅-发布者模式
发布日期:2021-06-29 15:36:29
浏览次数:2
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 15时38分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
130. 被围绕的区域
2019-04-29
欧式距离、余弦相似度和余弦距离
2019-04-29
transform 等效转换(参考源码)
2019-04-29
Docker学习(二):Docker基本操作(控制容器)
2019-04-29
Unity之C#学习笔记(0):环境配置与上手 HelloWorld
2019-04-29
高并发高可用秒杀系统(一)
2019-04-29
php如何将base64数据流文件转换为图片文件?
2019-04-29
JavaScript 的addEventListener() 事件监听详解!
2019-04-29
JavaScript的DOMContentLoaded事件和load的区别?
2019-04-29
PHP+JavaScript实现图片预览上传功能开发!
2019-04-29
JSONView - Chrome插件安装详解!(谷歌浏览器插件)!
2019-04-29
上传图片到阿里云OSS和获取上传图片的url的详解 !
2019-04-29
webstorm 和 phpstorm 有什么区别呢?做 WEB 开发用哪个好?
2019-04-29
常见位运算
2019-04-29
武大学生用python敲出樱花开放 | 附源码
2019-04-29
【中文教程】简单粗暴入门TensorFlow 2.0 | 北大学霸出品
2019-04-29
经典面试题:如何保证缓存与数据库的双写一致性?
2019-04-29
一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文
2019-04-29
硬货 | Redis 性能问题分析
2019-04-29
Kafka为什么这么快?
2019-04-29