自定义观察者模式实现对状态的监听

来源:互联网 发布:汉客和爱华仕 知乎 编辑:程序博客网 时间:2024/05/16 12:33

这里我主要分为4个步骤

  1. 定义被观察者Observabler接口

    public interface MainTvClick {    void onChangeListener(String string);}
  2. 创建观察者集合

    //观察者集合List<MainTvClick> mainTvClickList = new LinkedList<>();
  3. 添加观察者

        /** * 添加观察者 * * @param observer */public void addObserver(MainTvClick observer) {    if (null == observer) {        throw new NullPointerException("observer == null");    }    synchronized (this) {        if (!mainTvClickList.contains(observer)) {            mainTvClickList.add(observer);        }    }}
  4. 删除观察者

     /** * 删除观察者 * * @param observr */public synchronized void deleteMainObserver(MainTvClick observr) {    mainTvClickList.remove(observr);}
  5. 通知观察者

    /**     * 通知观察者     *     * @param info     */    public void notifyMainObserver(String info) {        for (MainTvClick observer :                mainTvClickList) {            observer.onChangeListener(info);        }    }   
  6. 记得单例哟

    public static MainActivity instance;/** * 单例 * * @return */public static MainActivity getInstance() {    if (instance == null) {        synchronized (MainActivity.class) {            if (instance == null) {                instance = new MainActivity();            }        }    }    return instance;}

接下来就是使用了.

  • 实现观察者 并且添加到 集合中

    public class HomeFragment extends BaseFragment implements MainActivity.MainTvClick {...这里其实就是实现接口方法         fragment = new HomeFragment();//                HomeFragment fragment1 = new HomeFragment();                MainActivity.getInstance().addObserver((MainActivity.MainTvClick) fragment);
  • 被观察者做出改变,通知观察者

     mToolbarTv.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        MainActivity.getInstance().notifyMainObserver("234");    }});

╔════════════════════════════════════════════════════════════════════════════════════════
1 ║ Thread: main
1 ╟────────────────────────────────────────────────────────────────────────────────────────
1 ║ APPFragment.onChangeListener (APPFragment.java:72)
1 ║ Logger.e (Logger.java:106)
1 ╟────────────────────────────────────────────────────────────────────────────────────────
11-24 13:34:31.936 11226-11226/com.tescoo.aat E/debugTAG: ║ 234

可以看到打印出来234了

0 0
原创粉丝点击