观察者模式
观察者模式=发布-订阅模式
Android中常用的EventBus以及Google Guava包中的event bus等都是对观察者模式的实现。
个人理解,从广义上讲,消息队列也是一种观察者模式的实现。
观察者模式的本质就是触发联动:在修改目标对象的状态的时候,就会触发相应的通知,然后会循环调用所有观察者对象相应的方法。
下面,我们实现以下功能:
当有新员工入职时,为其开通公司内部系统账号,并为其制作工牌;
当有员工离职时,为其关闭公司内部系统账号,并收回其工牌;
示例1:使用JDK中已有的观察者模式实现
目标类
public class Employee extends Observable {
private String name;
private Status status;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
//有员工变动,则手动设置目标变化
this.setChanged();
//说明有员工入职
if(status == Status.NEW){
this.notifyObservers(this);
}else if(status == Status.LEAVE){
this.notifyObservers(this);
}
}
enum Status{
NEW, LEAVE
}
}观察者1
观察者2
验证
输出如下:
示例2:使用Google Guava中的event bus实现
目标
订阅者或观察者
验证
输出
guava的优势:①不必实现接口;②处理事件或状态变化的方法命名没有约束,而JDK中只能是update
对guava中event bus的源码简单分析,点击这里。
参考
《研磨设计模式--第12章 观察者模式》
菜鸟教程:观察者模式
Last updated