阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

基于.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:041221
用户头像

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

关注

评论

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

如何用一台电脑制作一部动画短片?

zhoo299

动画 CG

从 0 到 1 搭建技术中台之技术文化篇

伴鱼技术团队

企业文化 技术管理

《程序员的数学》笔记

Rex

读书笔记

Anaconda与虚拟环境

halapano

Python virtualenv Anaconda

艺术生,我劝你Mac

zhoo299

Mac CG 艺术

绝了!Dataway让Spring Boot不再需要Controller、Service、DAO、Mapper

哈库纳

StringBoot DataQL

无需代码!通过 Dataway 配置一个带有分页查询的接口

哈库纳

spring springboot Dataway Hasor

Vol.2 谷歌不只有搜索

pyfn2030

谷歌Google

那些会阻碍程序员成长的细节[1]

MavenTalker

程序员 职业规划

Dataway 配置数据接口时和前端进行参数对接

哈库纳

Spring Boot DataQL Dataway Hasor

使用SpreadJS 开发在线问卷系统,构筑CCP(云数据采集)平台

葡萄城技术团队

数据挖掘 大数据 SpreadJS CCP

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十)在项目中准备测试环境

编程道与术

Java 编程 软件测试 TDD 单元测试

代码简洁之路 [持续更新]

hq

Java 大前端 编程习惯

计算机的时间

伴鱼技术团队

分布式 服务器 技术交流

AB 测试平台的设计与实现

伴鱼技术团队

架构 系统设计 后端 A/B

ARTS-WEEK01

子路无倦

ARTS 打卡计划

Vol.6 几个数据库相关的词

pyfn2030

数据库 大数据 新手指南

Dataway 整合 Swagger2,让 API 管理更顺畅

哈库纳

Spring Boot DataQL Dataway Hasor

Gartner 【RPA市场竞争格局】:中国厂商首次进入国际视野

人称T客

Vol.4 了解一下渗透测试

pyfn2030

黑客 网络安全

说到做到

Yukun

拖延症

完美兼容老项目!Dataway 4.1.6 返回结构的全面控制

哈库纳

spring Spring Boot Dataway Hasor

【快点查查】微信小程序使用流程

tomatocc

免费领课的活动你错过了么?

池建强

极客时间

Dataway 4.1.5 以上版本升级指南

哈库纳

string StringBoot Dataway Hasor

码农远程办公指北

大伟

Vol.3 人工智能这么热,你必须知道一点儿!

pyfn2030

人工智能

Vol.5 Go初探,新手必看!

pyfn2030

编程语言 新手指南

Wi-Fi p2p & ap 共存

贾献华

wifi p2p ap

自己常用的一些快捷键 windows10

halapano

Windows技巧

系统服务化构建-两方OAuth

图南日晟

微服务 软件工程 身份认证 架构设计

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