基于.NET 的职责链模式类库——NChain

阅读数:195 2008 年 10 月 5 日

话题:.NET设计模式语言 & 开发架构

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 Library