博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
18行为型模式之责任链模式
阅读量:4938 次
发布时间:2019-06-11

本文共 1748 字,大约阅读时间需要 5 分钟。

概念

   Chain of Responsibility(CoR)模式也叫职责链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。

例1:比如客户Client要完成一个任务,这个任务包括a,b,c,d四个部分。首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,...,直到D完成d部分。

例2:比如政府部分的某项工作,县政府先完成自己能处理的部分,不能处理的部分交给省政府,省政府再完成自己职责范围内的部分,不能处理的部分交给中央政府,中央政府最后完成该项工作。

例3:软件窗口的消息传播。     

例4:SERVLET容器的过滤器(Filter)框架实现。

 

角色和职责

Handler

    处理类的抽象父类。

concreteHandler

    具体的处理类。

 

 

责任链优缺点

优点:

1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。

2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。

3。类与类之间可以以松耦合的形式加以组织。

缺点:

因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。

适用于:

         链条式处理事情。工作流程化、消息处理流程化、事物流程化;

 

 

案例

//通过消息的传递,实现车辆的随意组装

#include 
using namespace std;class CarHandle{public: virtual void HandleCar() = 0; public: CarHandle *setNextHandle(CarHandle *carhandle) { this->carhandle = carhandle; return this->carhandle; }protected: CarHandle *carhandle;};class CarHandleHead : public CarHandle{public: virtual void HandleCar() { cout << "处理车头" << endl; if (this->carhandle != NULL) { carhandle->HandleCar(); } }};class CarHandleBody : public CarHandle{public: virtual void HandleCar() { cout << "处理车身" << endl; if (this->carhandle != NULL) { carhandle->HandleCar(); } }};class CarHandleTail : public CarHandle{public: virtual void HandleCar() { cout << "处理车尾" << endl; if (this->carhandle != NULL) { carhandle->HandleCar(); } }};void main(){ CarHandleHead *head = new CarHandleHead; CarHandleBody *body = new CarHandleBody; CarHandleTail *tail = new CarHandleTail; head->setNextHandle(body); body->setNextHandle(tail); tail->setNextHandle(NULL); //处理 head->HandleCar(); delete head; delete body; delete tail; system("pause"); return ;}

  

 

转载于:https://www.cnblogs.com/gd-luojialin/p/10358026.html

你可能感兴趣的文章
JSP
查看>>
---
查看>>
(第一组_GNS3)自反ACl
查看>>
hdu--1258--Sum It Up(Map水过)
查看>>
Spring @DeclareParents 的扩展应用实例
查看>>
VS2012更新Update1后帮助查看器无法打开
查看>>
【Weiss】【第03章】练习3.9:大整数运算包
查看>>
Android 文件的读取和写入
查看>>
高校表白APP-冲刺第四天
查看>>
outlook 设置163邮箱
查看>>
mysql优化——show processlist命令详解
查看>>
Solr服务器搭建
查看>>
画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
查看>>
win+rsync+php,跨平台的fswatch+rsync同步备份
查看>>
vue2 cdn 加载html,vue项目中使用CDN加载
查看>>
数组转集合踩坑
查看>>
node.js的异步I/O、事件驱动、单线程
查看>>
vue cli3 子目录问题
查看>>
github.com访问慢解决
查看>>
微服务架构最强详解
查看>>