白话设计模式第4篇——观察者模式

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版权协议,转载请附上原文出处链接和本声明。