您的位置:首页 > 移动开发 > Android开发

《Android源码设计模式》读书笔记 (12) 第12章 观察者模式

2016-02-17 23:50 609 查看

前言

最近在做IM即时通讯语音录制发送这个模块的时候,用到了观察者模式,因此结合书上内容在加深了一遍,不得不说观察者模式是一个使用率非常高的模式.

定义

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

作用:将观察者和被观察者解耦.最常用在GUI系统,订阅-发布系统.笔者遇到的场景是聊天语音播放和控制.

应用场景:关联行为场景,多级触发场景,系统的消息交换场景;

UML类图



Subject:被观察者

/**
* 被观察者 接口
* 作用: 提供增删,通知观察者的方法
* @author max
* @date 2016年2月17日
*
*
*/
public interface Subject {

//增
void addObserver(Observer observer);

//删
void deleteObserver(Observer observer);

//通知--这里可以自己根据实际业务需求,传递参数,通知所有观察者要做的事
void notifyObserver();
}


ConcreteSubject:具体被观察者

/**
* 具体被观察者,
* 作用:1.实现Subject接口 2.保存所有观察者对象
* @author max
* @date 2016年2月17日
*
*/
public class ConcreteSubject implements Subject{
private List<Observer> list = new ArrayList<>();

@Override
public void notifyObserver() {
if (list != null && list.size() > 0) {
//遍历所有观察者,接收通知,实现具体业务逻辑
for (Observer observer : list) {
observer.update();
}
}
}

@Override
public void addObserver(Observer observer) {
list.add(observer);
}

@Override
public void deleteObserver(Observer observer) {
list.remove(observer);
}

}


Observer:观察者,

/**
* 观察者接口
* 作用:提供update方法,收到被观察者通知,实现具体业务
* @author max
* @date 2016年2月17日
*
*/
public interface Observer {

void update();
}


ConcreteObserver:具体观察者.

/**
* 具体观察者,实现业务逻辑
* @author max
* @date 2016年2月17日
*
*/
public class ConcreteObserver implements Observer{

@Override
public void update() {
//根据自己业务需求,写观察者收到被观察者变化的业务逻辑代码
}

}


具体使用场景:拟被观察者Subject发生变化,所有观察者接收到通知,实现所有观察者update()业务过程

/**
* 模拟被观察者Subject发生变化,所有观察者接收到通知,实现其业务过程
*/
private void simple() {
//被观察者
Subject subject = new ConcreteSubject();
//所有观察者
Observer observer1 = new ConcreteObserver();
Observer observer2 = new ConcreteObserver();
Observer observer3 = new ConcreteObserver();
Observer observer4 = new ConcreteObserver();

//加入到所有观察者集合里面去
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.addObserver(observer3);
subject.addObserver(observer4);

//被观察者状态发生改变,通知所有观察者,所有观察者执行update()方法,会分别取执行4个具体observer的update()方法
subject.notifyObserver();

}


源码下载

点击下载Android简单观察者模式源码demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息