9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

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

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

关注

评论

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

由纪念日想到杨德昌

Elizen

随笔 电影

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (六)测试哪些内容:Right-BICEP

编程道与术

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

ThreadLocal到底会不会内存泄漏?实战直接告诉你答案!

刘超

Java 多线程 ThreadLocal

全面解读信创行业 关注国产操作系统

统小信uos

操作系统

终于有一款组件可以全面超越Apache POI

葡萄城技术团队

前后端分离 服务端 GrapeCity Documents

初探Electron,从入门到实践

葡萄城技术团队

大前端 Electron SpreadJS

如何快速更改qcow2镜像文件

奔跑的菜鸟

云计算

线程通信知识点扫盲!

Simon郎

Java 后端 多线程

选择适合自己的 OLAP 引擎

程序员小陶

大数据 开源 OLAP

AtomicStampedReference是怎样解决CAS的ABA问题

捉虫大师

Java

一杯茶的时间,上手 React 框架开发

图雀社区

Reac

一文读懂阿里云通信的产品体系、技术架构与智能化应用场景实践

阿里云Edge Plus

人工智能 云通信 短信 语音 智能联络中心

定在下午面试的那位候选人,说他不来了

Geek_6rptuk

团队管理 面试 简历优化 招聘

前浪的经验:区块链软件,一定也要去中心化

WasmEdge

比特币 区块链 智能合约 以太坊 加密货币

回顾经典,Netflix的推荐系统架构

王喆

人工智能 学习 推荐系统 netflix

故障的传播方式与隔离办法

Wales Kuo

谈谈控制感(3):让孩子更好地成长

史方远

心理学 控制感 教育

Android10版本引发的生产故障及安全知识归纳

大刘

android https TLS 加解密

猿灯塔-Phaser 使用介绍

猿灯塔

全球经济动荡下,超流币逆袭而来!

极客编

物联网技术栈之网关技术

老任物联网杂谈

物联网网关

怀念小时候吗?

安静的下雪天

个人感想

油管博主路透 3080Ti 参数、黄教主烤箱中拿出 DGX A100 预热发布会

神经星星

人工智能 互联网巨头 gpu 互联网 英伟达

需求是被挖掘还是被创造出来的?

Neco.W

产品 互联网 需求

什么是工作

史方远

随想 工作

ZigBee3.0 节点入网流程分析

taox

网络协议

我为什么要开启InfoQ写作

Nick

游戏夜读 | 关卡设计为什么难?

game1night

Flink Weekly | 每周社区动态更新

Apache Flink

大数据 flink 流计算 实时计算

Tomcat安全配置

wong

Tomccat security

高仿瑞幸小程序 08 创建第一个云函数

曾伟@喵先森

小程序 微信小程序 大前端 移动

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