zoukankan      html  css  js  c++  java
  • 观察者模式

    1. 对象间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都将得到通知并自动更新

    PNJ`%C$SU_7KY@{DAH81C`I

    2.观察者模式的结构

    USN$)Y9S6GGFDGEHWM2WA1O

    另一种实现方案

    image

    package com.javapatterns.observer.variation;

    public class Client
    {
        private static ConcreteSubject subject;
        private static Observer observer;

        public static void main(String[] args)
        {
            subject = new ConcreteSubject();

            observer = new ConcreteObserver();

            subject.attach(observer);

            subject.change("new state");

        }
    }

    package com.javapatterns.observer.variation;

    public class ConcreteObserver implements Observer
    {
        public void update()
        {
            System.out.println("I am notified");
        }
    }

    package com.javapatterns.observer.variation;

    public class ConcreteSubject extends Subject
    {
        private String state;

        public void change(String newState)
        {
            state = newState;

            this.notifyObservers();
        }
    }

    package com.javapatterns.observer.variation;

    public interface Observer
    {
        void update();
    }

    package com.javapatterns.observer.variation;

    import java.util.Vector;
    import java.util.Enumeration;

    abstract public class Subject
    {

        /**
         * @associates <{Observer}>
         * @link aggregation
         * @supplierCardinality 0..*
         */
        private Vector observersVector = new java.util.Vector();

        public void attach(Observer observer)
        {
            observersVector.addElement(observer);
            System.out.println("Attached an observer.");
        }

        public void detach(Observer observer)
        {
            observersVector.removeElement(observer);
        }

        public void notifyObservers()
        {
            java.util.Enumeration enumeration = observers();
            while (enumeration.hasMoreElements())
            {
                System.out.println("Before notifying");
                ((Observer)enumeration.nextElement()).update();
            }
        }

        public Enumeration observers()
        {
            return ((java.util.Vector) observersVector.clone()).elements();
        }

    }

    其它例子可参考http://blog.csdn.net/csh624366188/article/details/7477116

    观察者模式与MVC模式关系

         MVC是观察者模式、合并模式、策略模式设计模式组合

    观察者模再举一例:

            我和妹妹跟妈妈说:“妈妈,我和妹妹在院子玩,饭好了,告诉我们一下,请问这是什么模式

       1.这是观察者模式

    ~N`I0(2G{O@X40KV0EGA}SS

  • 相关阅读:
    修改tomcat的get方法的参数长度
    [转]修改hosts文件不起作用
    [转]solr DataImportHandler 解决mysql 表导入内存溢出问题
    plat模板修改记录
    Linux基本命令
    使用DTM ( Dynamic Topic Models )进行主题演化实验
    Stuts2的"struts.devMode"设置成true后,不起作用,仍需要重启tomcat
    R语言——绘图函数深入学习
    R语言——基本绘图函数
    Stem Cell 华人科学家
  • 原文地址:https://www.cnblogs.com/elite-2012/p/3482300.html
Copyright © 2011-2022 走看看