数据总线模式

框架可以通过发送特定的数据 触发特定的组件

一、核心的数据分发器

1.Member 代表订阅的组件
2.subscribe:将所有的业务组件加入到了一个集合中
3.publish: 触发事件,尝试像所有订阅的事件集合中出入该类型数据,由他们决定是否处理

 */
public class DataBus {
  private static final DataBus INSTANCE = new DataBus();
  private final Set<Member> listeners = new HashSet<>();

  public static DataBus getInstance() {
    return INSTANCE;
  }
  public void subscribe(final Member member) {
    this.listeners.add(member);
  }
  public void unsubscribe(final Member member) {
    this.listeners.remove(member);
  }
  public void publish(final DataType event) {
      event.setDataBus(this);
     for(Member m:listeners){
        m.accepts(event);
     }
   }
}

数据类型

public class MessageData extends AbstractDataType {
  private final String message;
  public MessageData(String message) {
    this.message = message;
  }
  public String getMessage() {
    return message;
  }
  public static DataType of(final String message) {
    return new MessageData(message);
  }
}

被触发的模块

accept:代表这个模块处理什么样的数据 是否处理发过来的消息

public interface Member extends Consumer<DataType> {
  void accept(DataType event);
}

这是一个成员的例子,当accept方法在DataBus中触发时,这个模块会自己判断是否是需要它处理的数据
如果是就会执行相应的功能--handleEvent

public class MessageCollectorMember implements Member {

  private List<String> messages = new ArrayList<>();

  @Override
  public void accept(final DataType data) {
    if (data instanceof MessageData) {
      handleEvent((MessageData) data);
    }
  }

  private void handleEvent(MessageData data) {
    LOGGER.info(String.format("%s sees message %s", name, data.getMessage()));
    messages.add(data.getMessage());
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,123评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,029评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • 001 不停锻炼自己的大脑,大脑越用越活。 用疑问句代替陈述句,可以调动大脑主动思考,开动头脑去赚钱。 002 选...
    一半一半zyh阅读 287评论 0 1