频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
观察者模式
2016-08-01 09:16:44         来源:xiangzhihong8的专栏  
收藏   我要投稿

观察者模式提供了一种对象设计,让主题和观察者之间松耦合。

观察者与主题之间依赖于接口,主题不需要知道观察者的具体实现可以动态添加删除观察者,对主题没有任何影响 新增新类型的观察者对主题没有影响,主题的代码不需要修改,而且旧的观察者也不受影响 观察者与主题都可以独立复用,因为是松耦合 只要约定的接口不改变,修改主题或观察者任何一方,都不会影响另一方

代码实现

首先定义抽象的观察者:

public interface Watcher {
	void update(String str);
}

定义被观察者:

public interface Watched{
    void addWatcher(Watcher watcher);
    void removeWatcher(Watcher watcher);
    void notifyWatchers(String str);
}

定义具体的观察者

public class ConcreteWatcher implements Watcher{
    @Override
    public void update(String str){
        System.out.println(str);
    }
}

定义具体的被观察者:

import java.util.ArrayList;
import java.util.List;
public class ConcreteWatched implements Watched{
    // 存放观察者
    private List list = new ArrayList();
    @Override
    public void addWatcher(Watcher watcher){
        list.add(watcher);
    }
    @Override
    public void removeWatcher(Watcher watcher) {
        list.remove(watcher);
    }
    @Override
    public void notifyWatchers(String str){
        // 自动调用实际上是主题进行调用的
        for (Watcher watcher : list){
            watcher.update(str);
        }
    }
}

书写测试类:

public class Test{
    public static void main(String[] args){
        Watched girl = new ConcreteWatched();

        Watcher watcher1 = new ConcreteWatcher();
        Watcher watcher2 = new ConcreteWatcher();
        Watcher watcher3 = new ConcreteWatcher();
        
        girl.addWatcher(watcher1);
        girl.addWatcher(watcher2);
        girl.addWatcher(watcher3);
        
        girl.notifyWatchers("开心");
    }
}

其实,如果大家做过Android开发的话,Android里面大量用了观察者模式,用textWatcher,eventbus等。

点击复制链接 与好友分享!回本站首页
相关TAG标签 观察者 模式
上一篇:LRU算法
下一篇:集合框架和泛型框架
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站