一、单例模式
1.定义
确保一个类只有一个实例,并为整个系统提供一个全局访问点 (向整个系统提供这个实例)。
2.结构
- 类图分为三部分,依次是类名、属性、方法;
- 以<<开头和以>>结尾的为注释信息;
- 修饰符+代表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());