23种设计模式-观察者模式(EventBus)

定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
使用场景:
1、关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系;
2、事件多级触发场景;
3、跨系统的消息交换场景,如消息队列、事件总线的处理机制。
简单模拟开发技术前线的发布——订阅:

/**
 * 程序员是观察者
 */
public class Coder implements Observer {
    public String name;

    public Coder(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        Log.e("Hi," + name + ",DevTechFrontier更新啦,内容:" + arg);
    }

}

public class DevTechFrontier extends Observable {
    public void postNewPublication(String content){
        //标示状态或者内容发生改变
        setChanged();
        //通知所有观察者
        notifyObservers(content);
    }
}

public class Test {
    public static void main(String[] args){
        //被观察的角色
        DevTechFrontier devTechFrontier=new DevTechFrontier();
        //观察者
        Coder mrsimple=new Coder("mrsimple");
        Coder coder1=new Coder("coder1");
        Coder coder2=new Coder("coder2");
        Coder coder3=new Coder("coder3");
        //将观察者注册到客观察对象的观察者列表中
        devTechFrontier.addObserver(mrsimple);
        devTechFrontier.addObserver(coder1);
        devTechFrontier.addObserver(coder2);
        devTechFrontier.addObserver(coder3);

        //发布消息
        devTechFrontier.postNewPublication("新的一起开发技术前线周报发布啦!");
    }
}

运行结果:
Hi,coder3,DevTechFrontier更新啦,内容:新的一起开发技术前线周报发布啦!
Hi,coder2,DevTechFrontier更新啦,内容:新的一起开发技术前线周报发布啦!
Hi,coder1,DevTechFrontier更新啦,内容:新的一起开发技术前线周报发布啦!
Hi,mrsimple,DevTechFrontier更新啦,内容:新的一起开发技术前线周报发布啦!

你可能感兴趣的:(23种设计模式-观察者模式(EventBus))