设计模式学习笔记——观察者模式

原创 2016年08月29日 16:41:06

1.基本简介

        观察者模式(又被称作发布-订阅模式)是一种软件设计模式,在此模式中,一个目标可以管理所有依赖于它的观察者,当目标本身的状态改变时主动向所有观察者发出通知。

        观察者模式将观察者和被观察的对象分开。面向对象设计的一个原则是单一职责原则,也就是说一个类只负责一种职责。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和可重用性。

2.模式中的角色

        2.1 抽象主题:它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加或者删除观察者对象。

      2.2 具体主题:将有关状态存入具体观察者对象,在具体主题内部状态改变事,给所有注册过的观察者发出通知。

      2.3 抽象观察者:为所有的具体观察者定义的一个接口,在得到具体主题通知时更新自己。

      2.4 具体观察者:实现抽象观察者角色所定义的更新接口,已便更改本身的状态

3.观察者模式的代码

    //抽象主题角色
    public interface IDataObservable {

    // 增加观察者
    public void registerDataObserver(IDataObserver dataObserver);
     
    // 移除观察者
    public void unRegisterDataObserver(IDataObserver dataObserver);
    
    // 向观察者(们)发出通知
    public void notifyAllObserver();

    // 观察者(们)收到通知后获取信息
    public Object getObserverData();
    
    }

  

    // 抽象观察者类,为所有具体观察者定义一个接口,在得到通知时更新自己
    public interface IDataObserver {
    
    public void update(IDataObservable dataObservable);
    
    }


    // 具体观察者或具体通知者,将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
   public class ConcreteSubject implements IDataObservable
   {
        private List<IDataObserver> mObserver=new ArrayList<IDataObserver>();
        private Object mObject;
    
        @Override
        public void registerDataObserver(IDataObserver dataObserver) {
            mObserverList.add(dataObserver);
        }
    
        @Override
        public void unRegisterDataObserver(IDataObserver dataObserver) {
           mObserver.remove(mObserver);
        }

        @Override
        public void notifyAllObserver() {
         for (IDataObserver observer : (ArrayList<IDataObserver>) mObserverList.clone()) {
                observer.update(this);
         }
        }

        @Override
        public Object getObserverData() {
            return mObject;
        }

    }
    // 具体观察者,实现抽象观察者角色所要求的更新接口,已是本身状态与主题状态相协调
    public class ConcreteObserver implements IDataObserver
    {

      public ConcreteObserver()
      {
       
      }
      // 实现抽象观察者中的更新操作
       @Override
      public void update(IDataObservable dataObservable) {

      }
    }

head first设计模式学习笔记(二)——观察者模式 C++实现

今天为大家介绍《head first设计模式》中的观察者模式的C++实现代码

十、观察者模式——设计模式学习笔记

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...

学习笔记——JAVA设计模式<21>观察者模式

观察者模式Observer核心 –观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)的状态变化时,他需要及时告知一系列对象(观察者对象,Observer),...

设计模式学习笔记——观察者模式

定义 观察者模式(发布订阅模式)——在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。 使用场景 关联行为场景,需要注意的是,关联行为是可拆分的,而不...
  • AndrLin
  • AndrLin
  • 2017年04月11日 19:37
  • 133

设计模式学习笔记——观察者模式

前言: 终于接触到观察者模式了,很早很早以前就听说过这个模式,当时也大概读了一下,但是并没有理解,总感觉这是一个很牛的东西,今天我要理解它…… 定义: 定义对象间一种一对多的依赖关系,使...

设计模式——学习笔记——观察者模式Observer——基础篇

Observer(观察者模式)是一个非常有意思的模式,在实际应用中非常的广泛,诸如时间监听模型,Tomcat中对组件生命周期的控制。同时Observer模式在一些场景下会与其他模式配合使用,如Adap...

《Head First 设计模式》学习笔记——观察者模式 + 装饰者模式

装饰者模式是JDK中另一个使用较多的设计模式,上一个是观察者模式(在Swing中大量使用),业内好的API设计无一离不开常见的设计模式,通常我们所说要阅读源码,也是为了学习大牛们的设计思路。————题...

设计模式学习笔记-观察者模式

链接:http://www.cnblogs.com/wangjq/archive/2012/07/12/2587966.html 1. 概述   有时被称作发布/订阅模式,观察者模式定义了...

设计模式学习笔记-观察者模式

观察者模式定义:有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习笔记——观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)