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

上传人:11****ws 文档编号:3654402 上传时间:2019-07-03 格式:DOC 页数:36 大小:737.50KB
下载 相关 举报
23个设计模式C#代码 第18章 观察者模式(Oberver Pattern).doc_第1页
第1页 / 共36页
23个设计模式C#代码 第18章 观察者模式(Oberver Pattern).doc_第2页
第2页 / 共36页
23个设计模式C#代码 第18章 观察者模式(Oberver Pattern).doc_第3页
第3页 / 共36页
23个设计模式C#代码 第18章 观察者模式(Oberver Pattern).doc_第4页
第4页 / 共36页
23个设计模式C#代码 第18章 观察者模式(Oberver Pattern).doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、.NET 设计模式(19):观察者模式( Observer Pattern) 概述在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。GOF 设计模式结构图图 1 Observer 模式结构图生活中的例子观察者定义了对象间一对多的关系,当一个对象的

2、状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。图 2 使用拍卖例子的观察者模式Observer 模式解说下面通过一个例子来说明 Observer 模式。监控某一个公司的股票价格变化,可以有多种方式,通知的对象可以是投资者,或者是发送到移动设备,还有电子邮件等。一开始我们先不考虑 Observer 模式,通过一步步地重构,最终重构为 Observer 模式。现在有这样两个类:Microsoft和 Inve

3、stor,如下图所示:图 3 UML 静态图示例它们的实现如下:public class Microsoftprivate Investor _investor;private String _symbol;private double _price;public void Update()_investor.SendData(this);public Investor Investorget return _investor; set _investor = value; public String Symbolget return _symbol; set _symbol = value;

4、 public double Priceget return _price; set _price = value; public class Investorprivate string _name;public Investor(string name)this._name = name;public void SendData(Microsoft ms)Console.WriteLine(“Notified 0 of 1s “ + “change to 2:C“, _name, ms.Symbol,ms.Price);简单的客户端实现:class Programstatic void M

5、ain(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 投资者那儿。

6、但是这里面出现了如下几个问题:1Microsoft 和 Investor 之间形成了一种双向的依赖关系,即 Microsoft 调用了 Investor 的方法,而 Investor 调用了 Microsoft 类的属性。如果有其中一个类变化,有可能会引起另一个的变化。2当出现一种的通知对象,比如说是移动设备 Mobile:public class Mobileprivate string _no;public Mobile(string No)this._no = No;public void SendData(Microsoft ms)Console.WriteLine(“Notified

7、 0 of 1s “ + “change to 2:C“, _no, ms.Symbol, ms.Price);这时候对应的 Microsoft 的类就应该改变为如下代码,在 Microsot 类中增加 Mobile,同时修改 Update()方法使其可以通知到移动设备:public class Microsoftprivate Investor _investor;private Mobile _mobile;private String _symbol;private double _price;public void Update()_investor.SendData(this);_mobile.SendData(this);public Mobile Mobileget return _mobile; set _mobile = value; public Investor Investorget return _investor; set _investor = value; public String Symbolget return _symbol; set _symbol = value; public double Priceget return _price; set _price = value;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。