【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 List
subsribers = 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秒