NET 设计模式学习笔记 十二、Observer.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NET 设计模式学习笔记 十二、Observer

NET 设计模式学习笔记 十二、Observer 概述 在软件构建过程中,我们需要为某些对象建立一种通知依赖关系--一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变。做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。减少对象之间的耦合有利于系统的复用,但是同时设计师需要使这些低耦合度的对象之间能够维持行动的协调一致,保证高度的协作(Collaboration)。观察者模式是满足这一要求的各种设计方案中最重要的一种。 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。[GOF《设计模式》] Design Pattern结构图 图1 Observer模式结构图 角色说明: Subject(被观察的对象接口) 规定ConcreteSubject的统一接口; 每个Subject可以有多个Observer; ConcreteSubject(具体被观察对象) 维护对所有具体观察者的引用的列表; 状态发生变化时会发送通知给所有注册的观察者。 Observer(观察者接口) 规定ConcreteObserver的统一接口; 定义了一个update()方法,在被观察对象状态改变时会被调用。 ConcreteObserver(具体观察者) 维护一个对ConcreteSubject的引用; 特定状态与ConcreteSubject同步; 实现Observer接口,通过update()方法接收ConcreteSubject的通知。 生活中的例子 观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。 图2使用拍卖例子的观察者模式 示例用例图: 十字路口的红绿灯,行人和司机都看红绿灯的变化来行动,司机看到向左转的指示灯和行人看到绿灯过马路这一情景,正好符合我们的观察者模式,司机(Drive)和行人(Pedestrian)是具体观察者而指示灯(PilotLamp)是观察者接口和红绿灯(TrafficLight)具体被观察对象,先看用例图: 代码设计: 先创建PilotLamp.cs: 01public interface PilotLamp 02{ 03///summary 04///green light 05////summary 06void TurnOn(); 07 08///summary 09///notice 10////summary 11string Notice 12{ 13get; 14set; 15} 16} 再创建DelegateEvent.cs: 1public delegate void EventHandler(); 再创建TrafficLight.cs: 01public class TrafficLight:PilotLamp 02{ 03public event EventHandler Notices; 04private string notice; 05 06#region GreenLight成员 07 08public void TurnOn() 09{ 10if(Notices!=null) 11Notices(); 12} 13 14public string Notice 15{ 16get 17{ 18return notice; 19} 20set 21{ 22notice=value; 23} 24} 25 26#endregion 27} 再创建Driver.cs: 01public class Driver 02{ 03private string Name; 04private PilotLamp greenLight; 05 06public Driver(string name,PilotLamp greenLight) 07{ 08this.Name=name; 09this.greenLight=greenLight; 10} 11 12public void GoLeft() 13{ 14Console.WriteLine(string.Format({1}司机,{0},请向左开车.,greenL

文档评论(0)

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

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

1亿VIP精品文档

相关文档