设计模式之-观察者模式

 

代码说话:

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

言归正传

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

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

 

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

//被观察者 接口
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");
    }
}

 

 输出结果演示:

 

 

 

 

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

欢迎提问 交流。

 

转载于:https://www.cnblogs.com/weiguannan/p/4456097.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值