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"));

 

今天多一点积累,明天少一分烦恼
原文地址:https://www.cnblogs.com/galibujianbusana/p/6502964.html