C#面向对象模式设计第十九讲:Observer 观察者模式(行为型模式)

(根据MSDN WebCast相关课程整理)

常用设计模式有23种,通常可以分为创建型(5种),结构型(7种)和行为型(11种)三大类型。

考察以下场景:ATM机操作中,当持人订阅了短信,邮件等通知的话,当有人对卡面在ATM机上有操作时,就会实时发出短信或邮件。这就是所谓的观察者模式。

clip_image002

当一个对象发生变化时,对它的变化感兴趣的其它对象(订阅了这个变化,即观察者)都可以得到通知。

GoF:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生变化时,所有依赖它的对象都能得到通知。

clip_image004

这是一种不好的设计方式,当对WithDraw()这一帐户变化感兴趣的对象发生变化时,如有新的对象也对此感兴趣,或用户取消了邮件通知,现有模式就难以适用这种变化。BankAccount中的Emailer和Mobile都是强依赖(BankAccount强依赖于Emailer和Mobile)。

clip_image006

clip_image008

根据依赖倒置的原则,我们将对这一设计进行改进。让Emailer和Mobile依赖于一个统一的接口(IObsever),则BankAccount只依赖于这个接口。由于对帐户变化感兴趣的对象也易发生变化,我们把这些对象提取出来,形成一个抽象的Subject类,统一管理,BankAccount继承这一Subject,这样,就解除了BankAccount对象与订阅者之间的依赖关系。

clip_image010

Observer模式可以独立的改变(扩展)目标的观察者。

C#中的Event就是典型的观察者模式的应用。

clip_image012

接口方法要求返回值,方法名和参数都一致,而事件或委托中,方法名可以不同。

<完>

转载于:https://www.cnblogs.com/luckeryin/archive/2012/03/02/2377368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值