设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 网络编程 >> .net >> 设计模式:利用C#的Delegate来改进Observer模式
精品推荐
.net点击TOP10
·我的.NET书架 (入门篇)
·.NET:是什么?将走向哪里?
·.NET 初 级 读 本
·在ASP.NET中把图片保存到SQL SERVER数据库
·从零开始学ASP.NET(基础篇)
·DataGrid导成Excel的例子
·ASP.Net Web Page深入探讨(一)
·CHK文件恢复工具
·.NET编程规范
·.NET Petshop详解(三):petshop三层结构之MiddleTire
网络编程点击TOP10
·ASP.NET 程序中常用的三十三种代码
·利用ASP.NET构建网上考试系统
·C#版的网站新闻发布系统
·设计ASP.NET新闻管理系统
·我的.NET书架 (入门篇)
·用ASP.NET和XML做的新闻系统
·.NET:是什么?将走向哪里?
·.NET 初 级 读 本
·十天学会ASP.net之第一天
·用C#实现木马程序
精选专题

设计模式:利用C#的Delegate来改进Observer模式

作者: 来源:网络文章 时间:2005-12-13 21:27:16

设计模式:利用C#的Delegate来改进Observer模式(1)

Observer模式是我们应用得非常多的一个模式,因为它定义了单数据源多视图结构的消息传递基本机制和对象设计,所以在几乎所有的将表示层与数据逻辑层分开的多层应用软件上都能套用上Observer模式。本文将分析C#语言来实现该模式的代码,并且针对该模式存在的一些缺点,利用C#的一个新特性Delegate来尝试对该模式进行了一些改进。

为了让更多的人能够看明白本文,所以在此之前,我们先来了解一下Observer模式的基本概念。

模式名称:Observer

结构图:CSdn.net/develop/article/images/14434001.GIF" align=baseline border=0>

意图:

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

适用性:

当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。

当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

应用实例:
在编写多层应用程序时,我们通常将表示层和数据逻辑层分隔开,比如很常见的View/Document结构,这种设计方式的好处带来的结果通常是使用多视图同时表示单一数据源,比如一个Web网站可以方便的同时拥有针对电脑的Html页面和针对手机的WAP页面。使用这种结构时,为了保持数据显示的一致性,必须要求数据源在数据发生改变时能及时的逐一通知每一个和它绑定的表示层进行更新。但是问题在于数据层本身并不知道到底有多少个不同的表示层正在反映着它的数据内容。因此需要设计一套有效的机制来完成这个目标。

模式实现:
我们先看看来自《设计模式迷你手册》的常规的C#实现代码。

Subject(抽象目标):
目标知道它的观察者。可以有任意多个观察者观察同一个目标。

//实现代码

class Subject
{
//由于不知道有多少个观察者,所以建立了一个观察者链表
private ArrayList list = new ArrayList();
private string strImportantSubjectData = "Initial";

public string ImportantSubjectData
{
get
{
return strImportantSubjectData;
}
set
{
strImportantSubjectData = value;
}
}

public void Attach(Observer o)
{
list.Add(o);
o.ObservedSubject = this;
}

public void Detach(Observer o)
{
}

public void Notify()
{
//在数据发生改变后遍历列表通知观察者
foreach (Observer o in list)

共4页 9 7 [1] [2] [3] [48 :>

设计模式:利用C#的Delegate来改进Observer模式 相关文章:
设计模式:利用C#的Delegate来改进Observer模式 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com