Android设计模式之(11)----观察者模式
来源:互联网 发布:各省人口普查数据 编辑:程序博客网 时间:2024/06/05 06:48
观察者模式
观察者模式属于行为模式。
主要用于解耦观察者与被观察者之间的联系。实现观察者一对一或者一对多的关系,当被观察者有状态改变的时候通知观察者,观察者根据改变的状态做出相应的事件动作。
使用场景
- 消息队列,事件总线情况
- 数据状态更新,对象变化
- 对象行为关联变化
代码示例
观察者与被观察者用接口实现具体方法。
(一) 观察者刷新接口
public interface ObserverListener { void update(Object o);}
(二)被观察者接口
public interface Subject { void register(ObserverListener observer); void unRegister(ObserverListener observer); void notifyChanged( Object arg);}
被观察者我们需要对其进行绑定,销毁绑定以及通知的具体事务方法
(三)定义一个观察者的管理器
public class ObserverManager implements Subject { private static ObserverManager observerManager; //观察者接口集合 private List<ObserverListener> list = new ArrayList<>(); //DCL双重加锁单利 public static ObserverManager getInstance() { if (null == observerManager) { synchronized (ObserverManager.class) { if (null == observerManager) { observerManager = new ObserverManager(); } } } return observerManager; } //注册 @Override public void register(ObserverListener observer) { if (null != observer) { list.add(observer); } } //反注册 @Override public void unRegister(ObserverListener observer) { if (null != observer) { list.remove(observer); } } //通知 @Override public void notifyChanged(Object o) { for (ObserverListener observerListener : list) { observerListener.update(o); } }}
实现被观察者的接口,因为观察者可能很多地方使用,使用单例将其封装使用。
对于需要观察的对象使用list将其存储起来,需要的时候在进行获取。
调用方式
- 注册与销毁被观察者
//注册 ObserverManager.getInstance().register(this); //销毁 ObserverManager.getInstance().unRegister(this);
- 发送状态更新信息
ObserverManager.getInstance().notifyChanged(person);
- 更新状态
//更新 @Override public void update(Object o) { //更新 }
总结
优点
- 灵活方便使用
- 解决观察者与被观察者的耦合
缺点
- 当有多个观察者,一个被观察者时,如果一个观察者卡顿,因为java默认顺序执行,会导致卡顿情况。
github地址
阅读全文
0 0
- Android设计模式之(11)----观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式之观察者模式
- Android 设计模式 之 观察者模式
- android 中的设计模式 之 观察者模式
- Android 设计模式 之 观察者模式
- android设计模式之观察者模式
- Android 设计模式之观察者模式
- Android 设计模式之观察者模式
- android设计模式之观察者模式详解
- android设计模式之--观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式 之 观察者模式详解
- Android设计模式之观察者模式
- Android设计模式之观察者模式
- Android设计模式学习之观察者模式
- Android 设计模式之观察者模式
- 转载的psql基础知识
- 1002:一元二次方程
- redis3.0.0配置文件详解
- opencl 返回值
- 学习 R 语言词云wordcloud--笔记
- Android设计模式之(11)----观察者模式
- 有关boost库的简要说明
- 4.6 leetcode -6 recover-binary-search-tree
- Neon加速的Hello world例子
- win10安装tensorflow
- Java中为什么局部内部类只能访问方法中的final型成员变量
- 解压版 的Tomcat基本配置和安装
- 白话讲hashMap
- 9个offer/12家公司