23个设计模式c#代码 第18章 观察者模式(oberver pattern)

23个设计模式c#代码 第18章 观察者模式(oberver pattern)

ID:20493608

大小:737.50 KB

页数:35页

时间:2018-10-12

23个设计模式c#代码 第18章 观察者模式(oberver pattern)_第1页
23个设计模式c#代码 第18章 观察者模式(oberver pattern)_第2页
23个设计模式c#代码 第18章 观察者模式(oberver pattern)_第3页
23个设计模式c#代码 第18章 观察者模式(oberver pattern)_第4页
23个设计模式c#代码 第18章 观察者模式(oberver pattern)_第5页
资源描述:

《23个设计模式c#代码 第18章 观察者模式(oberver pattern)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、图1Observer模式结构图生活中的例子观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。图2使用拍卖例子的观察者模式Observer模式解说下面通过一个例子来说明Observer模式。监控某一个公司的股票价格变化,可以有多种方式,通知的对象可以是投资者,或者是发送到移

3、动设备,还有电子邮件等。一开始我们先不考虑Observer模式,通过一步步地重构,最终重构为Observer模式。现在有这样两个类:Microsoft和Investor,如下图所示:图3UML静态图示例它们的实现如下:public class Microsoft{    private Investor _investor;    private String _symbol;    private double _price;    public void Update()    {        

4、_investor.SendData(this);    }    public Investor Investor    {        get { return _investor; }        set { _investor = value; }    }    public String Symbol    {        get { return _symbol; }        set { _symbol = value; }    }    public double Pri

5、ce    {        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.Write

6、Line("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

7、 = investor;        ms.Symbol = "Microsoft";        ms.Price = 120.00;        ms.Update();        Console.ReadLine();    }}运行后结果如下:NotifiedJomofMicrosoft'schangeto¥120可以看到,这段代码运行并没有问题,也确实实现了我们最初的设想的功能,把Microsoft的股票价格变化通知到了Jom投资者那儿。但是这里面出现了如下几个问题:1.Micro

8、soft和Investor之间形成了一种双向的依赖关系,即Microsoft调用了Investor的方法,而Investor调用了Microsoft类的属性。如果有其中一个类变化,有可能会引起另一个的变化。2.当出现一种的通知对象,比如说是移动设备Mobile:public class Mobile{    private string _no;    public Mobile(string No)    {        this._no = No;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。