23个设计模式C#代码第18章观察者模式(OberverPattern).docVIP

23个设计模式C#代码第18章观察者模式(OberverPattern).doc

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WORD格式 可编辑 专业知识 整理分享 HYPERLINK /Terrylee/archive/2006/10/23/Observer_Pattern.html .NET设计模式(19):观察者模式(Observer Pattern) 概述 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。[GOF 《设计模式》] 结构图 图1 Observer模式结构图 生活中的例子 观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。 图2 使用拍卖例子的观察者模式 Observer模式解说 下面通过一个例子来说明Observer模式。监控某一个公司的股票价格变化,可以有多种方式,通知的对象可以是投资者,或者是发送到移动设备,还有电子邮件等。一开始我们先不考虑Observer模式,通过一步步地重构,最终重构为Observer模式。现在有这样两个类:Microsoft和Investor,如下图所示: 图3 UML静态图示例 它们的实现如下: public?class?Microsoft { ????private?Investor?_investor; ????private?String?_symbol; ????private?double?_price; ????public?void?Update() ????{ ????????_investor.SendData(this); ????} ????public?Investor?Investor ????{ ????????get?{?return?_investor;?} ????????set?{?_investor?=?value;?} ????} ????public?String?Symbol ????{ ????????get?{?return?_symbol;?} ????????set?{?_symbol?=?value;?} ????} ????public?double?Price ????{ ????????get?{?return?_price;?} ????????set?{?_price?=?value;?} ????} } public?class?Investor { ????private?string?_name; ????public?Investor(string?name) ????{ ????????this._name?=?name; ????} ????public?void?SendData(Microsoft?ms) ????{ ????????Console.WriteLine(Notified?{0}?of?{1}s??+?change?to?{2:C},?_name,?ms.Symbol,ms.Price); ????} } 简单的客户端实现: class?Program { ????static?void?Main(string[]?args) ????{ ????????Investor?investor?=?new?Investor(Jom); ????????Microsoft?ms?=?new?Microsoft(); ????????ms.Investor?=?investor; ????????ms.Symbol?=?Microsoft; ????????ms.Price?=?120.00; ????????ms.Update(); ????????Console.ReadLine(); ????} } 运行后结果如下: Notified Jom of Microsofts change to ¥120 可以看到,这段代码运行并没有问题,也确实实现了我们最初的设想的功能,把Microsoft的股票价格变化通知到了Jom投资者那儿。但是这里面出现

文档评论(0)

xfnzn + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档