设计模式之观察者模式, 个人感觉相当的重要

原文地址:点击就送


观察者模式: (又被成为发布订阅模式, 模型-视图模式, 源-收听者模式或从属者模式) 是软件设计模式的一种. 在这种模式中, 一个目标物件管理所有依赖于他的观察者物件, 并且在它本身的状态改变时, 主动发出通知. 这通常透过呼叫各观察者所提供的方法来实现. 此种模式通常被用来视作事件处理系统.



UML

在jdk中有 观察者模式的例子

  • Observer观察者接口
  • 被观察者类 Observable
  • 被观察者发生改变时会通知观察者

观察者模式: 总体上被分为两种

  • 发布-订阅类的问题处理
  • 事件驱动模型: 类似web开发的监听器
  • ps:补充一下序列化 key 地址改变, 反序列不会调用构造等

事件驱动模型



这两种代码上的区别

  • 发布订阅: 被观察者需要继承Observable, 观察者需要实现Observer
  • 事件驱动模型: 主动方需要实现 WriterListener[]


总结:

  • 这两种模型达到的效果看上去是一样的, 观察者模式更加贴近现实业务, 事件驱动比观察者不用的地方
  • 观察者模式中理论上针对被观察者的动作是唯一的, 尽管update中有两个参数 一个是对象 一个算是标识, 在监听者模式中算是自定义的 - 注意点实际动作都是由监听者来实现的, 被监听者调用
  • 事件驱动更加的灵活, 但是系统复杂度作为代价, 也就是由事件源自己来维护监听队列
  • 观察者模式的局限性: 如果被观察者原来就有父类, 尽管可以用适配器模式, 但是事件驱动事件源的监听列表是自己维护的
  • 观察者模式中, 只能用update来触发对应的操作, 尽管有第二个参数作为双方约定, 事件驱动的信息都是封装在event中由监听者自己来定义, 监听者明白自己想要什么


文中最后举了一个类子, 感冒了脑袋有点晕,自我总结下

  • button是触发事件的媒介, 需要注册点击事件(监听+具体实现), 比如双击这个操作, 用户双击, 事件发生

整个观察者模式主要分为两大块

  • 观察者模式: 发布--订阅, 变化--更新
  • 事件驱动模型: 请求--响应, 事件发生--事件处理
  • 也就是应用场景经典代表作者与读者, 按钮事件

进度还有 75% fight

时间: 2024-10-25 04:44:55

设计模式之观察者模式, 个人感觉相当的重要的相关文章

【设计模式】观察者模式

生活中,当某件事发生时,应该通知所有的相关者.例如,上课地点有变,要通知所有学习这门课的同学. 在软件设计中,当一个对象的状态发生变化是,如何通知与它相关的所有对象,就是我们今天要谈到的观察者模式. 观察者模式 概述 定义了一种一对多的依赖关系.让多个观察者对象同事监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己. 实际上,观察者模式所做的工作就是在解除耦合.让耦合的双方都依赖于抽象,而不是依赖于具体.从而使得各自的变化都不会影响另一边的变化. 结

设计模式:观察者模式

设计模式:观察者模式 : http://www.cnblogs.com/li-peng/archive/2013/02/04/2892116.html 观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式. 今天做一个订报纸的小例子来理解一下观察者模式  出版者+订阅者=观察者模式 用下边的图来说就是    人民日报+订阅者=观察者模式 只要是订阅了人民日报的人,有了新报纸就会送到订阅者那里去, 当你不想订的时候取消就不订阅就不会再收到报纸了. //报

设计模式之-观察者模式

该文代码来自设计模式之惮一书. 观察者模式定义: 观察者模式也叫做发布订阅模式. 观察者模式中的角色: 1.被观察者 被观察者职责为管理观察者并通知观察者. 2.观察者 对接受到的消息进行处理. /// <summary> /// 被观察者 /// </summary> public abstract class Subject { /// <summary> /// 观察者集合 /// </summary> private List<IObserva

设计模式(16) 观察者模式(OBSERVER)C++实现

意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 动机: 将一个系统设计成一系列相互协作的类有一个常见的副作用:需要维护相关对象之间的一致性. 观察者模式定义一种交互,即发布-订阅: 一个对象当自身状态发生改变时,会发出通知,但是并不知道谁是他的接收者,但每个接收者都会接收到通知,这些接受者称为观察者. 作为对通知的响应,每个观察者都将查询目标状态,然后改变自身的状态以和目标状态进行同步. 使用场景: 使对象封装为独立的改变和使用:

&lt;&lt;Head First设计模式&gt;&gt;之观察者模式学习

1.概念 定义了对象之间的一对多依赖关系,当一个对象(主题对象)的状态改变时,它的所有依赖者(观察者对象)都会收到通知并自动更新. 2.优势 观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需修改主题对象的代码,只需要新的观察者对象实现接口.在程序运行的过程中,可以随时注册和删除观察者而不影响主体对象. 观察者模式使主题(Subject)对象和观察者(Observer)对象都可以被轻易地复用. 3.Java中观察者模式 Java API有内置的观察者模式,java.util

大话设计模式_观察者模式(Java代码)

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们自己能够自动更新自己.简单描述:1个Subject类(可以是抽象类可以是接口),可以有多个具体Subject类(继承抽象Subject),此具体Subject持有多个观察者的引用,在此具体Subject状态发生变化的时候调用这些观察者的相应方法.另外,这些持有的引用是抽象的,不是具体的,而这些引用所指向的对象时具体的观察者(即需要作出更新的具体观察者,这些具体

设计模式-观察者模式(Observer Pattern)

今天看了看观察者模式,有点小小的体会,从以下3点说明之 : 1.看一下经典的观察者模式图 2.讲个故事,说一下逻辑 有一个男人(Subject),他通过一定的手段(attach)拥有了3个女人(Observer):老婆(concreteObserver1),情人(concreteObserver2),小3(concreteObserver3).这3个女人都不知情,但是都想知道男人的月收入情况.而月收入需要通过工资卡(concreteSubject)来体现.所以,每当发工资(setState)时,

常用设计模式之观察者模式 + 事件委托

常用设计模式之观察者模式 + 事件委托 作用及UML (摘自<大话设计模式>) Code 1 abstract class Subject{ 2 protected String state; 3 public void setState(String state){this.state = state;} 4 public String getState(){return this.state;} 5 6 private List<Observer> observers = ne

跟我学设计模式视频教程——观察者模式,迭代器模式

课程视频 观察者模式 迭代器模式 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 跟我学设计模式视频教程--观察者模式,迭代器模式,布布扣,bubuko.com