• Android设计模式—— 观察者模式(以及EventBus的简单使用)


    1.概述

    观察者模式最常用的地方是GUI系统、订阅-发布系统。观察者模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得他们之间的依赖性更小。

    2.定义

    定义对象间的一种一对多依赖关系,使得每当一个对象改变状态时,所有依赖他的对象都会得到通知并自动更新。

    3.简单的代码实现

       观察者

    public class MyObserver implements Observer {
        public String  name;
        public MyObserver(String name){
            this.name=name;
        }
        @Override
        public void update(Observable observable, Object o) {
            System.out.println("Hi,标记下哦"+name+"更新内容:"+o.toString());
        }
        @Override
        public String toString() {
            return "观察者姓名:"+name;
        }
    }

       被观察者

    public class MyObservable  extends Observable{
        public void postNew(String content){
            /**
             * 标示状态或内容发生改变
             */
            setChanged();
            notifyObservers(content);
    
        }
    }

       实现

                   MyObservable myObservable=new MyObservable();
                    MyObserver myObserver1=new MyObserver("观察者1");
                    MyObserver myObserver2=new MyObserver("观察者2");
                    myObservable.addObserver(myObserver1);
                    myObservable.addObserver(myObserver2);
                    myObservable.postNew("这里是更新的内容哦");    

    运行后会打印:

    Hi,标记下哦观察者1更新内容:这里是更新的内容哦
    Hi,标记下哦观察者2更新内容:这里是更新的内容哦

    4.Observer Observable 

    两则都是JDK的内置类型,在以上中Observer是抽象观察者角色,Obsevable是抽象主题,而MyObserver,是具体观察者,MyObservable是具体主题。 MyObserver订阅MyObservable主题后,当MyObservable更新时,会遍历所有的MyObserver,发生通知。在整个的通知系统中是通过Observer和Observable完成的,MyObserver和MyObservable完全没有耦合,保证了订阅的灵活性和可扩展性。

     5.EventBus简单使用 (EventBus 也是使用的订阅,观察者模式)

     下载地址 https://github.com/greenrobot/EventBus

     注册

      EventBus.getDefault().register(this);

     解除注册

     protected void onDestroy(){
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }

    接受事件 3.0需要加入 

    @Subscribe
    方法名
    onEventMainThread 可以自定义了。

      @Subscribe
        public void onEventMainThread(ItemBean itemBean){
    
        textView.setText(itemBean.msg);
            Log.d("harvic", "onEventMainThread收到了消息:" + itemBean.getMsg());
    
        }

     发送事件

       EventBus.getDefault().post(new ItemBean("我的EventBus"));

     

    今天多一点积累,明天少一分烦恼
  • 相关阅读:
    离散数学--第十章 群,环,域
    离散数学--十一章 格与布尔代数
    matplotlib 基础|笔记
    CF Round #632 div2
    Codeforces Round#630 div2
    PVZ 2--攻略合集?
    【POJ
    【POJ
    【Aizu
    【Aizu
  • 原文地址:https://www.cnblogs.com/galibujianbusana/p/6502964.html
Copyright © 2020-2023  润新知