QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

  • 2008-10-05
  • 本文字数:1964 字

    阅读完需:约 6 分钟

Chain.NET(又名 NChain)职责链模式在.NET 和Mono 平台上的一个实现。它的0.1 版本(已可以在SourceForge 中访问)结合了标准的职责链模式以及命令模式,目的是“为基于命令处理的功能提供一个方便而又灵活的解决方案”。NChain 松散地基于Java 平台上的 Jakarta 的 Commons Chain 包。一般说来,职责链模式从一系列处理单元中分解出命令对象从而解耦。每个处理单元均包含相应的代码,以描述它可接受的命令对象的类型;另外它还会委托部分责任,用来处理与职责链上下一个处理单元不相匹配的对象。

以下是一个简单的职责链模式的示例

using System;<br></br>using System.Collections;<br></br> <br></br>namespace Chain_of_responsibility<br></br>{<br></br>        public interface IChain<br></br>        {<br></br>                bool Process(object command);<br></br>        }<br></br> <br></br>        public class Chain<br></br>        {<br></br>                private ArrayList _list;<br></br> <br></br>                public ArrayList List<br></br>                {<br></br>                        get<br></br>                        {<br></br>                                return _list;<br></br>                        }<br></br>                }<br></br> <br></br>                public Chain()<br></br>                {<br></br>                        _list = new ArrayList();<br></br>                }<br></br> <br></br>                public void Message(object command)<br></br>                {<br></br>                        foreach ( IChain item in _list )<br></br>                        {<br></br>                                bool result = item.Process(command);<br></br> <br></br>                                if ( result == true ) break;<br></br>                        }<br></br>                }<br></br> <br></br>                public void Add(IChain handler)<br></br>                {<br></br>                        List.Add(handler);<br></br>                }<br></br>        }<br></br> <br></br>        public class StringHandler : IChain<br></br>        {<br></br>                public bool Process(object command)<br></br>                {<br></br>                        if ( command is string )<br></br>                        {<br></br>                                Console.WriteLine("StringHandler can handle this message <p>: {0}",(string)command);</p><br></br> <br></br>                                return true;<br></br>                        }<br></br> <br></br>                        return false;<br></br>                }<br></br>        }<br></br> <br></br>        public class IntegerHandler : IChain<br></br>        {<br></br>                public bool Process(object command)<br></br>                {<br></br>                        if ( command is int )<br></br>                        {<br></br>                                Console.WriteLine("IntegerHandler can handle this message <p>: {0}",(int)command);</p><br></br> <br></br>                                return true;<br></br>                        }<br></br> <br></br>                        return false;<br></br>                }<br></br>        }<br></br> <br></br>        class TestMain<br></br>        {<br></br>                static void Main(string[] args)<br></br>                {<br></br>                        Chain chain = new Chain();<br></br> <br></br>                        chain.Add(new StringHandler());                       <br></br>                        chain.Add(new IntegerHandler());<br></br> <br></br>                        chain.Message("1st string value");<br></br>                        chain.Message(100);<br></br>                }<br></br>        }<br></br>}<p>NChain 提供了一个比较类似,但更为强壮的架构。</p><br></br>>

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

2008-10-05 02:041035
用户头像

发布了 157 篇内容, 共 55.8 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

MapReduce练习案例2 - 自定义排序

小马哥

大数据 hadoop mapreduce 七日更

张红珊—第二章作业

zzz

喜报丨京东科技主导的开源项目ShardingSphere荣登报告榜单国人主导开源项目中活跃度第五名!

京东科技开发者

分布式数据库 京东 ShardingSphere

“区块链+政务”深度融合 开启智慧城市政务新时代

CECBC

大数据

云原生基座OpenKube日志系统介绍

Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

潘大壮

Java 后端 mybatis mybatis源码

产品0期-第二周作业

曾烧麦

产品经理训练营

滴普技术荟-云原生基座OpenKube开放容器实践(四):linux模拟pod并配置上外网

作业二、作业三

清醒梦境

第三周作业 利益相关方排序

Eva

奥里给,通过这几份PDF,终于拿到了阿里,腾讯等一线大厂的offer

Java架构之路

Java 程序员 架构 面试 编程语言

第三期(2020-2021)传统行业云原生技术落地调研

York

灵雀云 云原生

第二周作业

大熊猫

MapReduce练习案例3 - 自定义分区

小马哥

大数据 hadoop mapreduce 七日更

香喷喷!2021最新出炉Java程序员面试全方位贴身指南

比伯

Java 编程 程序员 架构 面试

席卷图文学习前端Flex布局

我是哪吒

html 面试 大前端 html/css Flex

混合云管平台openkube日志系统介绍

Nebula Graph 在微众银行数据治理业务的实践

NebulaGraph

数据治理 图数据库 图数据库实战

中国将启动国家区块链平台

CECBC

区块链

产品经理训练营 Week02

柚子君~

极客大学产品经理训练营

惊艳全网!阿里人开源了K8s进阶宝典笔记,从理论到实践!

996小迁

Java 编程 架构 面试 k8s

作业

Eva

Alibaba内部晋升手册面试题集 ,Java岗位

Java架构之路

Java 程序员 架构 面试 编程语言

产品经理训练营-作业二

胡小湖

区块链技术发展现状

CECBC

区块链

Hadoop之HDFS 内部机制知多少?

hanke

大数据 hadoop hdfs 开源 数据存储

Mybatis系列全解(六):Mybatis最硬核的API你知道几个?

潘大壮

Java 后端 mybatis mybatis源码

第二次作业&第三次作业

yoki

滴普技术荟-云原生基座OpenKube开放容器实践(三):理解linux虚拟网络设备bridge

产品经理训练营-第二周作业

懒杨杨

太牛了!这是什么神仙级的面试pdf(含答案),跳槽大厂不是问题

Java架构之路

Java 程序员 架构 面试 编程语言

基于.NET的职责链模式类库——NChain_.NET_Al Tenhundfeld_InfoQ精选文章