java观察者模式

来源:互联网 发布:韩顺平满汉楼数据库 编辑:程序博客网 时间:2024/06/08 06:43

先用简单的语言描述一下该模式,被观察者发生改变的时候通知观察者,用一个现实例子,订阅杂志,当你(观察者)订阅一中杂志(被观察者)后,你(观察者)不用操心什么时候杂志(被观察者)会来,当杂志(被观察者)生产好了就会主动提醒你去取杂志(被观察者发生的改变传给观察者),及观察者订阅好了被观察者,被观察这发生改变的时候通知观察者。这种模式在android中一个应用就是广播broadcast,这是系统级别的观察者模式。


观察者模式的基本实现

 1、定义观察者和被观察者接口

观察者接口:

public interface BaseObserver {    /**     * 接受观察者发送的消息     * @param message     */    void receiveMessage(String message);}

被观察者接口

public interface BaseObservable {    /**     * 添加观察者     *     * @param observer     */    void addObserver(BaseObserver observer);    /**     * 添加观察者     *     * @param observer     */    void removeObserver(BaseObserver observer);    /**     * 发布消息,提示所以观察着     *     * @param string     */     void publishTheNews(String string) ;}

2、实现接口

实现观察者接口

public class FansObserver implements BaseObserver {    private String name;    public FansObserver(String name) {        this.name = name;    }    @Override    public void receiveMessage(String message) {        Log.e("FansObserver", name + "收到消息:" + message);    }}
实现被观察者接口

public class StartObservable implements BaseObservable {    private List<BaseObserver> observerList;    //单利模式    private static StartObservable startObservable;    private StartObservable() {        observerList = new ArrayList<>();    }    public static StartObservable getStartObservable() {        if (startObservable == null) {            synchronized (StartObservable.class) {                if (startObservable == null) {                    startObservable = new StartObservable();                }            }        }        return startObservable;    }    @Override    public void addObserver(BaseObserver observer) {        observerList.add(observer);    }    @Override    public void removeObserver(BaseObserver observer) {        observerList.remove(observer);    }    @Override    public void publishTheNews(String string) {        for (BaseObserver observer : observerList) {            observer.receiveMessage(string);        }    }}
3、订阅和通知

订阅

 /**     * 创建粉丝(观察者)并且将粉丝添加到明星(被观察者)中     */    private void add() {        FansObserver observer = new FansObserver("粉丝1");        FansObserver observer1 = new FansObserver("粉丝2");        FansObserver observer2 = new FansObserver("粉丝3");        BaseObserver observer3 = new BaseObserver() {            @Override            public void receiveMessage(String message) {                Log.e("BaseObserver", "粉丝4");            }        };        StartObservable.getStartObservable().addObserver(observer);        StartObservable.getStartObservable().addObserver(observer1);        StartObservable.getStartObservable().addObserver(observer2);        StartObservable.getStartObservable().addObserver(observer3);    }
通知

StartObservable.getStartObservable().publishTheNews("今天多云");
执行完这些够会打印




自定义观察者模式基本就实现了。

github下载地址:点击这里哦




0 0
原创粉丝点击