zoukankan      html  css  js  c++  java
  • 观察者模式之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("第三页第六题");
        }
    }
  • 相关阅读:
    tomcat常见错误
    tomcat——大致简介和执行过程
    JSON的基本操作
    VS Code 终端显示问题
    VS Code在本地进行调试和打开本地服务器
    重做了一下我的音乐播放器
    Treimu更新记录1.2.9.0
    Android开发中Eclipse里的智能提示设置
    一次面试经历
    正确处理WPF中Slider值改变事件的方式
  • 原文地址:https://www.cnblogs.com/smileblogs/p/13131895.html
Copyright © 2011-2022 走看看