GoF设计模式:职责链模式(Chain of Responsibility Pattern)—请求的链式处理-C/S开发框架
“一对二”,“过”,“过”……这声音熟悉吗?你会想到什么? 对!纸牌。在类似“斗地主”这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判断。 一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新的牌。 在这个过程中,牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。 在设计模式中,我们也有一种专门用于处理这种请求链式传递的模式,它就是本章将要介绍的职责链模式。 模式概述很多情况下,在一个软件系统中可以处理某个请求的对象不止一个。 职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。 链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理。 客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,实现请求发送者和请求处理者解耦。 模式定义
模式结构图职责链模式结构的核心在于引入了一个抽象处理者。职责链模式结构如下图所示: 在职责链模式结构图中包含如下几个角色:
它定义了一个处理请求的接口,一般设计为抽象类,由于不同的具体处理者处理请求的方式不同,因此在其中定义了抽象请求处理方法。因为每一个处理者的下家还是一个处理者,因此在抽象处理者中定义了一个抽象处理者类型的对象(如结构图中的successor),作为其对下家的引用。通过该引用,处理者可以连成一条链。
它是抽象处理者的子类,可以处理用户请求,在具体处理者类中实现了抽象处理者中定义的抽象请求处理方法,在处理请求之前需要进行判断,看是否有相应的处理权限,如果可以处理请求就处理它,否则将请求转发给后继者;在具体处理者中可以访问链中下一个对象,以便请求的转发。 模式伪代码在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。 请求在这个链上传递,直到链上的某一个对象决定处理此请求。 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。 职责链模式的核心在于抽象处理者类的设计,抽象处理者的典型代码如下所示:
注意,创建职责链伪代码这里没有写。其实很简单,先创建这些具体的处理器对象,然后依次把这些处理器对象串起来。 职责链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。 纯与不纯的职责链模式职责链模式可分为纯的职责链模式和不纯的职责链模式两种:
一个纯的职责链模式要求一个具体处理者对象只能在两个行为中选择一个:要么承担全部责任,要么将责任推给下家,不允许出现某一个具体处理者对象在承担了一部分或全部责任后又将责任向下传递的情况。 而且在纯的职责链模式中,要求一个请求必须被某一个处理者对象所接收,不能出现某个请求未被任何一个处理者对象处理的情况。
在一个不纯的职责链模式中允许某个请求被一个具体处理者部分处理后再向下传递,或者一个具体处理者处理完某请求后其后继处理者可以继续处理该请求,而且一个请求可以最终不被任何处理者对象所接收。 模式总结职责链模式通过建立一条链来组织请求的处理者,请求将沿着链进行传递,请求发送者无须知道请求在何时、何处以及如何被处理,实现了请求发送者与处理者的解耦。 在软件开发中,如果遇到有多个对象可以处理同一请求时可以应用职责链模式,例如在Web应用开发中创建一个过滤器( 适用场景
参考文档:
开发应用-职责链模式(Chain Of Resposibility Pattern) C/S开发框架权限扩展与定制按钮功能详细设计 C/S开发框架提供类似SAP系统的快速命令,能快速打开界面窗体(Command模式) ASP.NET IIS程序池被回收导致网站打开慢,IIS配置启用预加载模式-C/S开发框架 C#使用Newtonsoft.Json.dll解析Json数据-C/S开发框架 软件编程之软件架构设计(学习)-C/S开发框架 GoF设计模式:单例模式(Singleton Pattern)—确保对象的唯一性-C/S开发框架 GoF设计模式:适配器模式(Adapter Pattern)—不兼容结构的协调-C/S开发框架 GoF设计模式:迭代器模式(Iterator Pattern)—遍历聚合对象中的元素 -C/S开发框架 GoF设计模式:组合模式(Composite Pattern)—树形结构的处理-C/S开发框架 GoF设计模式:建造者模式(Builder Pattern)—复杂对象的组装与创建-C/S开发框架 GoF设计模式:访问者模式(Visitor Pattern)—操作复杂对象结构-C/S开发框架 GoF设计模式:享元模式(Flyweight Pattern)—实现对象的复用-C/S开发框架 GoF设计模式:装饰模式(Decorator Pattern)—扩展系统功能-C/S开发框架 GoF设计模式:命令模式(Command Pattern)—请求发送者与接收者解耦-C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |