【www.gdgbn.com--thinkphp】

 Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(中篇)    optimizer(翻译)

关键字     设计模式 singleton strategy decorator composite state

出处     http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/PATTERNS.asp

Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(中篇)
作者:Samir Bajaj
译者:荣耀
【译序:C#进阶文章。译者对Samir提供的C#例子进行了简单整理(作者提供的某些代码在译者的环境中无法通过编译),并编写了对应的C++示例,一并置于译注中,以便读者比对。译文中所有C#、C++程序调试环境均为Microsoft Visual Studio.NET 7.0 Beta2】
decorator
     客户应用常常需要加强某些类的方法所提供的服务。可能需要分别在方法调用前后插入一些预先处理和后继处理的代码。要实现这个目标,一种办法是干脆做成不同的方法调用。然而,这种方式不但麻烦,而且不利于框架的扩展。例如,如果对于不同的客户来说明显要执行不同的预先处理和后继处理任务,应用程序逻辑将会因为条件语句而变得晦涩不清并难以维护。问题是如何才能增强类所提供的功能的同时又不影响客户代码,而Decorator模式正是所需。
     让我们来考察一个具有远程文件传输功能的类的例子。这样的类代码可能如表5所示。
表5
class FileTransfer
{
    public virtual void Download(string url, byte[] data, int size)
    {
        // 下载文件
    }
    public virtual void Upload(string url, byte[] data, int size)
    {
        // 上传文件
    }
}
         假定有一个客户程序对这个功能感兴趣。除了能够上传和下载文件外,客户应用还希望能够将所有的文件传输请求和执行访问检查写入日志。基于decorator模式的一种实现方式是从FileTransfer类派生出一个类并重载虚方法,并于调用基类方法之前或之后,插入附加代码。如表6所示。

本文来源:http://www.gdgbn.com/jiaocheng/6224/