观察者模式-最终话

优点

在 .NET 中实现 Observer 有以下优点:

  • 取消了依赖性。上述示例清楚地显示出 Album 和 BillingService 类之间的依赖性已经取消。
  • 提高了可扩展性。“.NET 中的观察器”示例说明了添加新类型的观察器是多么简单。Album 类是“开-闭”原则的一个例子,最初是 Bertrand Meyer 在 Object-Oriented Software Construction 第二版 [Bertrand00] 中编写的,它描述了一个易于扩充但不必修改的类。Album 类体现了这种原则,因为您可以添加 PlayEvent 的观察器,而不必修改 Album 类。
  • 提高了可测试性。“测试考虑事项”说明了您为什么可以不必对 BillingService 进行实例化就能测试 Album 类。测试验证了 Album 类能正确运行。测试还提供了如何编写BillingService 的出色示例。

缺点

如示例所示,Observer 的实现简单而直接。不过,随着委派和事件的数目不断增加,我们很难跟踪当事件触发时发生了什么情况。因此,代码变得很难调试,因为您必须在代码中搜索观察器。

参考文章:

http://msdn.microsoft.com/zh-cn/library/ms998543.aspx

http://msdn.microsoft.com/zh-cn/library/ff649896.aspx

http://msdn.microsoft.com/zh-cn/library/ms954621.aspx

时间: 2024-10-12 16:47:06

观察者模式-最终话的相关文章

巴蜀3540 -- 【Violet 6 最终话】蒲公英

Description 原题的时间限制是 2s . 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了.我觉得把那么可怕的怪物召唤出来的那个坏蛋也很坏呢.不过奶奶说他是很难受的时候才做出这样的事的…… 最近村子里长出了一大片一大片的蒲公英.一刮风,这些蒲公英就能飘到好远的地方了呢.我觉得要是它们能飘到那个城市里面,让哥哥看看就好了呢! 哥哥你要快点回来哦! 爱你的妹妹 Vio

一起话单业务量下降问题的排查过程

      [文章摘要] 最近,某局点支持人员反映某模块重启之后话单业务量下降,希望研发人员帮助查找问题原因. 本文对该问题原因的查找过程进行了详细的介绍,为相关软件问题的分析及解决提供了有益的参考. 一.问题描述 在某局点,有一个软件系统实现话单的生成功能.某天,该局点的现场支持人员发来邮件,反映现场某话单分拣模块重启之后生成的话单的量较之前有大幅度的降低.其邮件中表达的意思有这几个: (1) 现场人员只是将该模块重启了,并未修改任何配置. (2) 重启之后模块(图1中的话单分拣模块A)生成的

火影700话完结 15年完结大结局

火影忍者700话大结局更新了!!鸣人终于当上了火影,老婆是雏田,儿子叫博人,女儿叫日葵,佐助娶了小樱,女儿名字叫莎拉娜,鹿丸和手鞠结婚,儿子叫鹿代. 木叶丸当上了老师,伊鲁卡和赤丸都已经老了,卡卡西收了个新徒弟,佐助在森林里发现里异样. 旗木卡卡西,我们很难有一个定义将他阐述,天才忍者?老师?学生?拷贝忍者--但是,我隐约感到一句话才是这位悲情人物的写照"一个人的感情是有限的,能失去多少,失去多少回,而失去太多之后便所剩无几了."曾经显赫的家族,然而父亲却因为保护同伴放弃任务而最终在众

观察者模式小记

观察者模式,我们有很多其他的方式来称呼它.比如熟悉的发布/订阅模式,回调方式,Listen监听等. 我们看到很多源码中有Observer,Listen,Hook,Callback,基本用到了观察者模式: 话不多说,直接来点代码说明下 首先定义被观察者(抽象的,公有的) public interface Subject { /** * 添加观察者 * * @param observer */ void add(Observer observer); /** * 删除观察者 * * @param o

how tomcat works 总结 二

第五章 servlet容器 第 5 章讨论 container 模块.container 指的是 org.apache.catalina.Container 接口,有4 种类型的 container:engine, host, context 和 wrapper.这章提供了两个工作于 context 和wrapper 的程序. 容器共分四类,类图如下: 一个wrapper就是一个servlet; 一个context包含若干个wrapper; 本章分了两个部分,第一部分是wrapper,第二部分是

1kkk

代码 1 # !usr/bin/python3.4 2 # -*- coding:utf-8 -*- 3 4 import json 5 import grequests 6 import requests 7 import os 8 import time 9 import re 10 from lxml import etree 11 import random 12 13 14 def exception_handler(request, exception): 15 print('连接错

【Fate/kaleid liner 魔法少女☆伊莉雅】系列中实践的、新世代的动画摄影工作流

通常的日本动画的摄影中,是以追加Cell(celluloid 赛璐珞)与背景的合成滤镜处理为主,而在[Fate/kaleid liner 魔法少女☆伊莉雅]系列的,加入了自己使用3DCG软件来制作特效素材的新的摄影风格. 作为最后工程的摄影,也可以受益于3DCG软件 已经放映结束的本人气系列的第3季,[魔法少女☆伊莉雅 2wei Herz! ]中, Asahi Production 的中西康祐摄影导演带领的小组,在[Cell与CG的崭新融合]的概念下,实践了最新摄影工作流. [魔法少女☆伊莉雅

Entity Framework Demo(一) 简单搭建环境

Entity Framwork(实体框架,简称EF)是ORM(Object Relational Mapping,对象映射关系)的一个解决方案. EF允许项目将数据库的表映射为实体,并封装了操作方法,方便开发人员直接操作数据库. EF有三种开发模式,分别是: Database First(数据库先行): 将已存在的数据库中的表映射为实体: Code First(代码先行):先编写代码,再通过EF反向生成数据库的表: Model First(模型先行):通过一个可视化模型,分别生成数据库和代码.

城市风云儿的装备体系

小时候可喜欢看了,在此把它的装备体系记载下来,供游戏开发参考 游戏的乐趣在于装备的剑-珠之间的各种组合,类似卡尔的技能 资料全部来源于百度百科.维基百科 神珠 雷神珠 雷神剑剑柄处的神珠,是雷神剑的动力源,能召来电闪雷鸣攻击. 风神珠 风神剑剑柄处的神珠,是风神剑的动力源,能召来狂风攻击. 水神珠 龙神七珠之一,在幻神岛下方的琵琶湖里,能任意操纵水. 金狸珠 龙神七珠之一,位于四国的狸猫祖先金昌长老所有,称为变化珠,配合神剑能任意变身,但有形无实. 火炎珠 龙神七珠之一,在阿苏山火山口内,能任意