1、意图

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

2、适用性

(1)当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

(2)当对一个对象的改变需要同时改变其它对象时,而不知道具体有多少对象有待改变。

(3)当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合的。

3、参与者

(1)Subject:目标知道它的观察者;提供注册和删除观察者对象的接口

(2)Observer:在那些在目标发生改变时需要获得通知的对象定义一个更新接口

(3)ConcreteSubject:将有关状态存入各ConcreteObserver对象;当它的状态发生改变时,向它的各个观察者发出通知

(4)ConcreteObserver:维护一个指向ConcreteSubject对象的引用 ;存储在关状态,这些状态应与目标的状态保持一致;实现Observer的更新接口以使自身状态与目标的状态保持一致。

4、协作 

(1)当ConcreteSubject发生任何可能导致其观察者与其本身状态不一致的改变时,它将通知经它的各个观察者

(2)在得到一个具体目标的改变通知后, ConcreteObserver对象可向目标对象查询信息,ConcreteObserver使用这些信息以使它的状态与目标对象的状态一致

行为模式之Observer模式相关推荐

  1. 移动项目开发笔记(.Net下的观察者(Observer)模式)

    下面是一些关于这个Observer的基本一些概念,在很多地方都能看到,这里我归纳这这里便于以后查阅: 一.发布订阅模型(pub-sub) 二.动机(Motivation) 在软件构建过程中,我们需要为 ...

  2. C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介...

    委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...

  3. java获取jsp 组件,利用Observer模式解决组件间通信问题-JSP教程,Java技巧及代码

    1. 问题的提出 以前做一个界面的时候常常会遇到这样的尴尬情况:希望保留各个独立的组件(类),但又希望它们之间能够相互通信.譬如windows中的explorer,我们希望鼠标点击左边是树型目录的一个 ...

  4. 设计模式-Observer模式

    目录 角色组成 抽象主题(Subject) 具体主题(Concrete Subject) 抽象观察者(Observer) 具体观察者(Concrete Observer) 具体实现 总结 观察者模式( ...

  5. Observer 模式在eHR中的应用

    接触模式应该是在大三的时候,那时候感觉是模式让我真正的认识到了OO,现在毕业了,也工作有半年了,终于体会到了"商业特色的软件开发"了,根本就没有多余的时间去考虑运用什么模式.怎样使 ...

  6. Observer模式在J2EE中的实现

    引言: 设计模式是经验的文档化.它是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述.更通俗的来说,它是一个问题/解决方案对.一旦我们掌握了设计模式,就等于拥有了一支强有力的专家队伍.它 ...

  7. 设计模式--观察者(Observer)模式

    模式定义 定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知并更新 类图 应用场景 当更改一个对象的状态可能需要更改其他对象,并且实际 ...

  8. 重温Observer模式--热水器·改(转载)

    引言 在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式.实际上,不使用委托和事件,一样可以实现Observer模式.在本文中,我将使 ...

  9. java observer模式_Java观察者模式(Observer)详解及应用

    Java观察者模式(Observer)详解及应用 (2011-12-15 14:03:30) 标签: 杂谈 Java观察者模式(Observer)详解及应用 由于网站带有弱sns功能,因此需要设计关注 ...

最新文章

  1. 做自适应网站专业乐云seo_乐云分享新站SEO优化实践经验,收录和排名持续稳定上升方...
  2. 数据库中间件支持数据库集群方案
  3. 排序命令: sort, wc, uniq
  4. php文本数据库 搜索,一个文本数据库的搜索方法_php
  5. 使用 TypeScript 自定义装饰器给类的方法增添监听器 Listener
  6. 离线安装Eclipse的Color theme plugin
  7. SAP C4C Opportunity和SAP ERP Sales流程的集成
  8. 使用jQuery清空file文件域的解决方案
  9. linux shell 变量减法_Linux Shell (3) - 变量运算
  10. EnvironmentError: mysql_config not found
  11. 编程语言----00程序员常用网站
  12. HDU 6704 K-th occurrence(主席树 + RMQ + 后缀数组)题解
  13. 论文阅读笔记(七)——Thin MobileNet
  14. ListView学习思维导图
  15. 台式电脑主板插线步骤图_电脑主板开关接线图解教程(图文)
  16. 基于开源的BPM流程引擎VS天翎自研BPM流程引擎
  17. 美国弗吉尼亚大学计算机科学,弗吉尼亚大学计算机科学排名第31(2018年TFE美国排名)...
  18. vue实现搜索框记录搜索历史_Vue 实现输入框新增搜索历史记录功能
  19. redis集群管理-5.0.14版本
  20. 从零开始学架构 01-架构基础【笔记】

热门文章

  1. hdu 3786 寻找直系亲属
  2. python 迭代器
  3. 计算机办公知识考试,电脑办公系统基础知识考试试题
  4. force oracle delete type,3.Oracle Interface Configuration Tool (OIFCFG) 命令参考
  5. python编程零基础-编程零基础应当如何开始学习 Python?
  6. python 爬虫实例-python爬虫实例,一小时上手爬取淘宝评论(附代码)
  7. python手机版idle-如何在Ubuntu上安装Python IDE IDLE
  8. 函数式编程语言python-函数式编程语言
  9. php和python和java-Java、Python与PHP的虚拟机异同
  10. python语言怎么学-Py列为黑客应该学的四种编程语言之一 新手该怎么学