美文网首页
观察者模式(Observer)

观察者模式(Observer)

作者: 鉴闻俗说 | 来源:发表于2017-12-08 12:33 被阅读0次

    一、观察者模式

    1、简介
    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。当这个主题对象的状态发生变化时,会通知所有的观察者,让他们能够自动更新自己。

    2、观察者模式的构成
    (1) 、抽象主题角色:将所有对观察这对象的引用保存在一个集合中,每个抽象主题角色都可以拥有任意个观察者对象。抽象主题角色提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现。
    (2)、抽象观察者角色:为所有的观察者对象定义的一个接口,在得到主题的通知时更新自己。
    (3)、具体主题角色:在具体主题角色内部状态发生改变时,向所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。
    (3)、具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,一边使自身的状态与主题的状态相协调。如果需要,护体观察者角色可以保存一个指向具体主题角色的引用。通常用一个子类来实现。

    二、 Demo

    1、抽象主题角色

    /**
     * 抽象主题角色
     *
     */
    public interface Watched
    {
        public void addWatcher(Watcher watcher);
        
        public void removeWatcher(Watcher watcher);
        
        //当具体主题角色内部状态发生变化时,通知具体观察者
        //随之相应改变
        public void notifyWatchers(String str);
    }
    

    2、抽象观察者角色

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

    3、 具体主题角色

    import java.util.ArrayList;
    import java.util.List;
    
    public class ConcretedWatched implements Watched
    {
        List<Watcher> watchers = new ArrayList<>();
        
        @Override
        public void addWatcher(Watcher watcher)
        {
            watchers.add(watcher);
            
        }
    
        @Override
        public void removeWatcher(Watcher watcher)
        {
            watchers.remove(watcher);
            
        }
    
        @Override
        public void notifyWatchers(String str)
        {
            for(Watcher w : watchers)
                w.update(str);  
        }
    
    }
    

    4、具体观察者角色

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

    5、测试类

    public class Test
    {
        public static void main(String[] args)
        {
            Watched girls = new ConcretedWatched();
            
            Watcher girl1 = new ConcretedWatcher();
            Watcher girl2 = new ConcretedWatcher();
            Watcher girl3 = new ConcretedWatcher();
            
            girls.addWatcher(girl1);
            girls.addWatcher(girl2);
            girls.addWatcher(girl3);
            
            girls.notifyWatchers("hellow world");
            
            girls.removeWatcher(girl2);
            
            girls.notifyWatchers("lalala");
        }
    }
    

    上一篇:异常
    下一篇:内部类

    相关文章

      网友评论

          本文标题:观察者模式(Observer)

          本文链接:https://www.haomeiwen.com/subject/tmqeixtx.html