C#设计模式-观察者模式(Observer Pattern)[FreeDownload]
观察者模式应用非常之广,是我最喜爱的设计模式之一。
常用的数据库管理系统中有这种情况:
客户要求数据字典改变后要实时更新相关业务窗体的数据。
如下图[销售单]和[采购单]业务窗体中分别有货币和单位数据字典选择框。货币和单位数据是在打开窗体
时加载的,假设客户需要增加一个货币或单位,在不关闭[销售单]和[采购单]窗体的前提下,如何使货币和单位数据保持最新?
使用观察者模式正是解决上述问题的最佳方案之一!所谓
十年久旱逢甘雨
千里他乡遇故知
和尚洞房花烛夜
老童金榜提名时
来看看这个案例的威力吧!
几个关键接口
代码
//by 易学原创,www.vjsdn.net
/// <summary>
/// 观察者模式接口
/// </summary>
public interface IObserver
{
//仅一个方法,通知(Notify)观察者接收到消息
void Notify();
}
/// <summary>
/// 支持数据字典观察者的窗体,比如Invoice,PO,PN等业务窗体
/// Lookup功能视为数据字典观察者
/// </summary>
public interface IObserverSupportable
{
//获取观察者列表, 通常业务窗体内会对应多个数据字典表
IList GetObservers();
}
/// <summary>
/// 数据字典窗体
/// </summary>
public interface IObserverDataDictForm
{
//
//注册观察者,当字典数据改变时通知所有观察者同步更新数据.
//
//一个数据字典可能会关联多个业务窗体.比如货币字典会在采购窗体和发票窗体内使用.
//因此,当字典数据改变时要通知采购窗体和发票窗体刷新数据.
//
void RegisterObserver(IList observers);
}
//by 易学原创,www.vjsdn.net
}