本帖最后由 yqw_gz_java 于 2019-4-4 21:44 编辑
1. 被观察者Subject对象
首先是一个Subject类的父类,它实现了维护装有观察者引用集合的功能。
[AppleScript] 纯文本查看 复制代码 public class Subject {
//保存注册的观察者对象
private List<Observer> mObervers = new ArrayList<>();
//注册观察者对象
public void attach(Observer observer) {
mObervers.add(observer);
Log.e("SZH", "attach an observer");
}
//注销观察者对象
public void detach(Observer observer) {
mObervers.remove(observer);
Log.e("SZH", "detach an observer");
}
//通知所有注册的观察者对象
public void notifyEveryOne(String newState) {
for (Observer observer : mObervers) {
observer.update(newState);
}
}
}
接着是一个具体的被观察者对象
public class ConcreteSubject extends Subject {
private String state;
public String getState() {
return state;
}
public void change(String newState) {
state = newState;
Log.e("SZH", "concreteSubject state:" + newState);
//状态发生改变,通知观察者
notifyEveryOne(newState);
}
}
2. 观察者Observer对象
首先是一个接口,抽象出了一个及时更新的方法
[AppleScript] 纯文本查看 复制代码 public interface Observer {
void update(String newState);
}
接着是几个观察者对象。
[AppleScript] 纯文本查看 复制代码 public class ObserverA implements Observer {
//观察者状态
private String observerState;
@Override
public void update(String newState) {
//更新观察者状态,让它与目标状态一致
observerState = newState;
Log.e("SZH", "接收到消息:" + newState + ";我是A模块,快来抢吧!!");
}
}
public class ObserverB implements Observer {
//观察者状态
private String observerState;
@Override
public void update(String newState) {
//更新观察者状态,让它与目标状态一致
observerState = newState;
Log.e("SZH", "接收到消息:" + newState + ";我是B模块,快来抢吧!!");
}
}
public class ObserverC implements Observer {
//观察者状态
private String observerState;
@Override
public void update(String newState) {
//更新观察者状态,让它与目标状态一致
observerState = newState;
Log.e("SZH", "接收到消息:" + newState + ";我是C模块,快来抢吧!!");
}
}
---------------------
作者:Colin_Mindset
来源:CSDN
原文:https://www.cnblogs.com/carsonzhu/p/5770253.html
|