zoukankan      html  css  js  c++  java
  • 设计模式之观察者(Observer)模式 代码详解

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * User: HYY
     * Date: 13-10-28
     * Time: 下午1:34
     * To change this template use File | Settings | File Templates.
     */
    
    /**
     * 这里使用接口是因为各个观察者可能有各自的独特的方法和属性,因此将其抽象成方法
     */
    interface Observer {
        void update();
    }
    
    interface Subject {
        void addObserver(Observer observer);
    
        void deleteObserver(Observer observer);
    
        void notifyObservers();
    }
    
    class ConcreteObserver implements Observer {
        private String ObserverName;
        private Subject subject;//一个指向主题的引用,
    
        public ConcreteObserver(String ObserverName, Subject subject) {
            this.ObserverName = ObserverName;
            this.subject = subject;
            if (this.subject != null) {
                this.subject.addObserver(this);
            }
        }
    
        @Override
        public void update() {
            //在这个方法中可以通过它,来判断自己关注的数据是否发生变化,并作出相应的行动
            System.out.println(ObserverName + " 已经被更新!");
        }
    }
    
    class ConcreteSubject implements Subject {
        List<Observer> observerList;
    
        public ConcreteSubject() {
            this.observerList = new ArrayList<Observer>();
        }
    
        @Override
        public void addObserver(Observer observer) {
            if (observer != null) {
                if (observerList.contains(observer)) {
                    System.out.println("已有该观察者,无需添加!");
                } else {
                    observerList.add(observer);
                }
            }
        }
    
        @Override
        public void deleteObserver(Observer observer) {
            observerList.remove(observer);
        }
    
        @Override
        public void notifyObservers() {
            for (Observer observer : observerList) {
                observer.update();
            }
        }
    }
    
    public class MyObserverTest {
        public static void main(String[] args) {
            //初始化4个观察者和一个被观察对象,构造函数自动将观察的对象附上关系
            ConcreteSubject subject = new ConcreteSubject();
    
            ConcreteObserver observer1 = new ConcreteObserver("观察者(1)", subject);
            ConcreteObserver observer2 = new ConcreteObserver("观察者(2)", subject);
            ConcreteObserver observer3 = new ConcreteObserver("观察者(3)", subject);
            ConcreteObserver observer4 = new ConcreteObserver("观察者(4)", subject);
    
            subject.notifyObservers();
        }
    }
  • 相关阅读:
    压缩和还原压缩的JS代码
    1.3(Spring学习笔记)Spring-AOP
    软件配置篇-MySQL下载及安装
    软件配置篇-java下载及安装
    1.2(Spring学习笔记)Spring中的Bean
    1.1(Spring学习笔记)Spring基础(BeanFactory、ApplicationContext 、依赖注入)
    1.6(学习笔记)EL表达式
    1.5 JSP标准标签库(JSTL)(核心标签 out、set、remove、if、choose、forEach、forTokens、redirect)
    1.4(学习笔记)JSP自定义标签
    随机算式
  • 原文地址:https://www.cnblogs.com/wuyou/p/3425145.html
Copyright © 2011-2022 走看看