基于.NET的职责链模式类库——NChain2011-02-26 infoq 译:赵劼Chain.NET(又名NChain)是职责链模式在.NET和Mono平台上的一个实现。它的0.1版本(已可以在SourceForge中访问)结合了标准的职责链模式以及命令模式,目的是“为基于命令处理的功能提供一个方便而又灵活的解决方案”。NChain松散地基于Java平台上的Jakarta的Commons Chain包。一般说来,职责链模式从一系列处理单元中分解出命令对象从而解耦。每个处理单元均包含相应的代码,以描述它可接受的命令对象的类型;另外它还会委托部分责任,用来处理与职责链上下一个处理单元不相匹配的对象。以下是一个简单的职责链模式的示例:
using System;
using System.Collections;
namespace Chain_of_responsibility
{
public interface IChain
{
bool Process(object command);
}
public class Chain
{
private ArrayList _list;
public ArrayList List
{
get
{
return _list;
}
}
public Chain()
{
_list = new ArrayList();
}
public void Message(object command)
{
foreach ( IChain item in _list )
{
bool result = item.Process(command);
if ( result == true ) break;
}
}
public void Add(IChain handler)
{
List.Add(handler);
}
}
public class StringHandler : IChain
{
public bool Process(object command)
{
if ( command is string )
{
Console.WriteLine("StringHandler can handle this message
: {0}",(string)command);
return true;
}
return false;
}
}
public class IntegerHandler : IChain
{
public bool Process(object command)
{
if ( command is int )
{
Console.WriteLine("IntegerHandler can handle this message
: {0}",(int)command);
return true;
}
return false;
}
}
class TestMain
{
static void Main(string[] args)
{
Chain chain = new Chain();
chain.Add(new StringHandler());
chain.Add(new IntegerHandler());
chain.Message("1st string value");
chain.Message(100);
}
}
}
NChain提供了一个比较类似,但更为强壮的架构。

NChain需要更进一步的测试以及性能监控,来确定它到底是否适用于企业应用架构。这是个开源项目,并且提供了有用的入门示例可供快速入门。目前看来,在各种考虑使用命令模式,并且需要根据上下文来执行不同类型命令的场景下,NChain都会有一定用武之地。英文原文:.NET Chain of Responsibility Libraryhttp://www.infoq.com/news/2008/09/nchain