美文网首页
观察者模式

观察者模式

作者: 笨笨哒2018 | 来源:发表于2018-08-09 10:38 被阅读0次

    观察者模式是对象的行为模式。又叫发布订阅模式、源监听模式等。
    它定义了一种一对多的依赖关系,让多个观察者同时监听某一个主题对象,当主题对象状态发生变化,会通知所有的观察者对象,使他们能够自动更新自己。

    image.png

    抽象主题角色:Subject接口:

    主题角色把所有观察者对象的引用保存在一个聚集里,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。

    //主题接口
     interface Subject {
         //添加观察者
         void addObserver(Observer obj);
         //移除观察者
         void deleteObserver(Observer obj);
         //当主题方法改变时,这个方法被调用,通知所有的观察者
         void notifyObserver();
    }
    

    抽象观察者:Oserver接口:

    为所有具体观察者定义一个接口,在得到主题通知时更新自己,这个接口叫做更新接口。

    interface Observer {
       
        public void update();
    }
    

    具体主题角色:

    import java.util.ArrayList;
    import java.util.List;
    
    public class TeacherSubject implements Subject {
        //用来存放和记录观察者
        private List<Observer> observers=new ArrayList<Observer>();
    
        
        @Override
        public void addObserver(Observer obj) {
            observers.add(obj);
        }
    
        @Override
        public void deleteObserver(Observer obj) {
            int i = observers.indexOf(obj);
            if(i>=0){
                observers.remove(obj);
            }
        }
    
        @Override
        public void notifyObserver() {
            for(int i=0;i<observers.size();i++){
                Observer o=(Observer)observers.get(i);
                o.update();
            }
        }
    
     public void setHomework(){
         
            System.out.println("开始做作业了...同学们");
            this.notifyObserver();
        }
    
    }
    

    具体观察者角色:

    public class StudentObserver implements Observer {
    
      
        private String name;
        //构造器用来注册观察者
        public StudentObserver (String name) {
            this.name=name;
        
        }
    
    
        @Override
        public void update() {
            System.out.println(name+"开始做作业");
            
        }
    
    }
    

    调用

    public class TestObserver {
    
        public static void main(String[] args) {
            
            TeacherSubject teacher=new TeacherSubject();
    
            StudentObserver zhangSan=new StudentObserver("张三");
            StudentObserver LiSi=new StudentObserver("李四");
            StudentObserver WangWu=new StudentObserver("王五");
    
            teacher.addObserver(zhangSan);
            teacher.addObserver(LiSi);
            teacher.addObserver(WangWu);
    
             teacher.setHomework();
       
        }
    }
    

    相关文章

      网友评论

          本文标题:观察者模式

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