EventBus中的设计模式

一、单例模式

1.定义

确保一个类只有一个实例,并为整个系统提供一个全局访问点 (向整个系统提供这个实例)。

2.结构

单例模式类图.gif-9.2kB

  • 类图分为三部分,依次是类名、属性、方法;
  • 以<<开头和以>>结尾的为注释信息;
  • 修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见;
  • 带下划线的属性或方法代表是静态的。
  • 三要素:

  • 私有的构造方法;

  • 指向自己实例的私有静态引用;

  • 以自己实例为返回值的静态的公有方法。

3.使用

        在热门的EventBus中也采用了单例,因为它内部缓存了各个组件发送过来的event对象,并负责分发出去,各个组件需要向同一个EventBus对象注册自己,才能接收到event事件,肯定是需要全局唯一的对象,所以采用了单例。 

static volatile EventBus defaultInstance;
public static EventBus getDefault() {
        if (defaultInstance == null) {
            synchronized (EventBus.class) {
                if (defaultInstance == null) {
                    defaultInstance = new EventBus();
                }
            }
        }
        return defaultInstance;
}

 

二、观察者模式

1.定义

观察者模式:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新

2.结构

这里写图片描述

  • Subject:就是“被观察”的角色,它将所有观察者对象的引用保存在一个集合中。
  • Observer:是抽象的“观察”角色,它定义了一个更新接口,使得在被观察者状态发生改变时通知自己。
  • ConcreteObserver:具体的观察者。

3.意义

此设计模式最重要的作用就是 解耦!将观察者与被观察者解耦,使得他们之间的依赖性更小。

4.使用

当一个MessageEvent对象改变了状态的时候,所有依赖于他的event对象都会收到通知并作出对应的处理。

//1.定义事件

public static class MessageEvent { /* Additional fields if needed */ }
//2.准备订阅的过程

//声明和注释自己的订阅方法,可选指定的线程模式

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

//注册或者取消订阅者,
 @Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }
//3.把发生的时间给传递到订阅者

EventBus.getDefault().post(new MessageEvent());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值