• 观察者模式之Observer和Subject


    package cn.it.observe2;
    
    public interface Observer {
    
        void update(String status);
    
    }
    package cn.it.observe2;
    
    public class ObserverStudent implements Observer {
    
        Subject subject;
    
        String studentName;
    
        public ObserverStudent(String studentName, Subject subject) {
            this.studentName = studentName;
            this.subject = subject;
            subject.registerObserver(this);
        }
    
        public void update(String status) {
            System.out.println(studentName + "得到作业:" + status);
        }
    }
    package cn.it.observe2;
    
    public interface Subject {
        /**
         * 注册观察者
         */
        void registerObserver(Observer observer);
    
        /**
         * 移除观察者
         */
        void removeObserver(Observer observer);
    
        /**
         * 通知观察者
         */
        void notifyObservers(String name);
    }
    package cn.it.observe2;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class SubjectTeacher implements Subject {
    
        List<Observer> observers = new ArrayList<Observer>();
    
    
        public void registerObserver(Observer observer) {
            observers.add(observer);
        }
    
        public void removeObserver(Observer observer) {
            int i = observers.indexOf(observer);
            if(i>=0){
                observers.remove(observer);
            }
        }
    
        public void notifyObservers(String status) {
            for (Observer observer : observers) {
                observer.update(status);
            }
        }
    
    
        //布置作业的方法,在方法最后,需要调用notifyObserver()方法,通知所有观察者更新状态
        public void setHomework(String status){
            System.out.println("今天的作业是" + status);
            this.notifyObservers(status);
        }
    }
    package cn.it.observe2;
    
    /**
     * 观察者模式提供了一种对象设计,让主题和观察者之间耦合度降得很低,为什么呢?关于观察者的一切,主题只知道观察者实现了Observer接口,并不需要观察者具体的类是谁,做了什么或者其他细节.
     *
     *   这样的话,由于松耦合,改变主题或者观察者其中一方,并不会影响另一方,只要他们之间的接口仍被遵守,就可以自由地改变它.
     *
     *   降低对象之间的耦合度,也是面设对象设计的一个很重要的原则.  
     */
    public class TestMain {
    
        public static void main(String[] args) {
            Subject teacher = new SubjectTeacher();
    
            Observer zhangsan = new ObserverStudent("张三", teacher);
            Observer lisi = new ObserverStudent("李四", teacher);
    
            ((SubjectTeacher) teacher).setHomework("第二页第六题");
            ((SubjectTeacher) teacher).setHomework("第三页第六题");
        }
    }
  • 相关阅读:
    中国大陆地区用户请特别注意:请勿存放违反当地法律法规文件
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
  • 原文地址:https://www.cnblogs.com/smileblogs/p/13131895.html
Copyright © 2020-2023  润新知