码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之-观察者模式

时间:2015-04-25 18:08:04      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

 

代码说话:

观察者模式主要可以理解分为两部分,一个是观察者,一个是被观察者。你一定觉得这个回答很弱智,但是设计模式就是这么弱智的一些东西的组合。

言归正传

为了扩展性一般会对观察者 和 被观察者进行接口的抽象  类的抽象  

从而分成 有抽象观察者  抽象被观察者  真正的观察者   真正的被观察者

 

请看第一个抽象被观察者:

//被观察者 接口
public interface Watched {
    public void addWatcher(Watcher watcher);  
    public void removeWatcher(Watcher watcher);  
    public void notifyWatcher(String str);  
}

上面的被观察者主要具备三个功能:1.添加观察者   2. 移除观察者 3.告诉观察者更新

 

第二个 :抽象观察者

//观察者 接口
public interface Watcher {
     public void update(String str); 
}

 抽象观察者目前就一个功能, 更新数据。在收到被观察者的更新消息后做相应的数据更新

 

第三个:真正干活的被观察者 ,即可以实例化的 被观察者

//被观察者的实例
public class WatchedImpl implements Watched {

    private List<Watcher> list = new LinkedList<Watcher>();  
    
    public void addWatcher(Watcher watcher) {
        list.add(watcher);
    }

    public void removeWatcher(Watcher watcher) {
        list.remove(watcher);
    }

    public void notifyWatcher(String str) {
         if(list.size()==0 || list==null)return;  
            for(Watcher watcher : list){  
                watcher.update(str);  
            } 
    }

}

描述:主要实现抽象接口中的  添加  移除  更新 观察者的功能。 实现原理就是在类内部用集合缓存一个 观察者对象的引用

 

 第四个:这正干活的观察者

public class WatcherImpl implements Watcher {
    private String name;
    public WatcherImpl(String name){
        this.name = name;
    }
    public void update(String str) {
         System.out.println(str+"   "+this.name);
    }

}

 

main 方法进行测试:

public class MainTest {
    public static void main(String[] args) {
        Watched girl = new WatchedImpl();
        
        Watcher watcher1 = new WatcherImpl("watcher1");  
        Watcher watcher2 = new WatcherImpl("watcher2");  
        Watcher watcher3 = new WatcherImpl("watcher3");
        
       
        girl.addWatcher(watcher1);  
        girl.addWatcher(watcher2);  
        girl.addWatcher(watcher3);
        
        girl.notifyWatcher("hello");  
        girl.removeWatcher(watcher2);  
        girl.notifyWatcher("world");
    }
}

 

 输出结果演示:

 

 技术分享

 

 

======================================

欢迎提问 交流。

 

设计模式之-观察者模式

标签:

原文地址:http://www.cnblogs.com/weiguannan/p/4456097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!