2022.05.17 更新 把原博客删除了,因为不够纯粹,新博客就只讲观察者模式就好了
何谓观察? 即察言观色主动发现对方的一举一动, 举一些业务视角的例子:
- 发现按钮被点击就要发起网络请求
- 发现当前数据异常就要吐司提示错误
- 发现金额变化就要同步显示到UI页面上
那么谁是观察者 谁是被观察者呢?
谁具备变化的特征谁就是被观察者, 谁观察变化谁就是观察者
被观察者要做两件事: ① 注册观察者 ② 变化的时候通知观察者
观察者就做一件事: 收到通知的时候处理业务即可

下面让我们自己写一个简单的观察者模式

public interface Observer<T> {
void onChanged(T t);
}
public class Observable<T> {
private List<Observer<T>> mObserverList;
private T value;
public void addLObserver(Observer<T> observer) {
if (mObserverList == null) {
mObserverList = new ArrayList<>();
}
mObserverList.add(observer);
}
public void removeLObserver(Observer<T> observer) {
if (mObserverList != null) {
mObserverList.remove(observer);
}
}
public void setValue(T t) {
if (t != value) {
notifyUpdate(t);
value = t;
}
}
private void notifyUpdate(T t) {
for (int i = 0; i < mObserverList.size(); i++) {
Observer<T> tlObserver = mObserverList.get(i);
tlObserver.onChanged(t);
}
}
}
如何使用?
Observable<String> stringLObservable = new Observable<>();
stringLObservable.addObserver(s -> mDataBinding.tvText.setText(s));
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
stringLObservable.setValue("网络请求成功");
}
}, 2000);
版权声明:本文为LosingCarryJie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。