设计模式——职责链模式(C++实现)

 

  1 #include <iostream>
  2 #include <string>
  3
  4 using namespace std;
  5
  6
  7 class Handler
  8 {
  9 public:
 10         Handler(Handler* pstHandler): m_pstHandler(pstHandler)
 11         {
 12
 13         }
 14
 15         virtual void HandleRequest(int request) = 0;
 16
 17 protected:
 18         Handler* m_pstHandler;
 19 };
 20
 21 class ConcreteHandler1: public Handler
 22 {
 23 public:
 24         ConcreteHandler1(Handler* pstHandler): Handler(pstHandler)
 25         {
 26
 27         }
 28
 29         virtual void HandleRequest(int request)
 30         {
 31                 if (request < 7)
 32                 {
 33                         cout<< "组长:批假"<< request<< "天"<< endl;
 34                 }
 35                 else
 36                 {
 37                         m_pstHandler->HandleRequest(request);
 38                 }
 39         }
 40 };
 41
 42 class ConcreteHandler2: public Handler
 43 {
 44 public:
 45         ConcreteHandler2(Handler* pstHandler): Handler(pstHandler)
 46         {
 47
 48         }
 49
 50         virtual void HandleRequest(int request)
 51         {
 52                 if (request < 15)
 53                 {
 54                         cout<< "总监:批假"<< request<< "天"<< endl;
 55                 }
 56                 else
 57                 {
 58                         m_pstHandler->HandleRequest(request);
 59                 }
 60         }
 61 };
 62
 63 class ConcreteHandler3: public Handler
 64 {
 65 public:
 66         ConcreteHandler3(Handler* pstHandler): Handler(pstHandler)
 67         {
 68
 69         }
 70
 71         virtual void HandleRequest(int request)
 72         {
 73                 if (request < 30)
 74                 {
 75                         cout<< "经理:批假"<< request<< "天"<< endl;
 76                 }
 77                 else
 78                 {
 79                         cout<< "经理:"<< request<< "天,时间太长,超过公司规定"<< endl;
 80                 }
 81         }
 82 };
 83
 84 int main(int argc, char* argv[])
 85 {
 86         Handler* jingli = new ConcreteHandler3(NULL);
 87         Handler* zongjian = new ConcreteHandler2(jingli);
 88         Handler* zuzhang = new ConcreteHandler1(zongjian);
 89
 90         zuzhang->HandleRequest(12);
 91         zuzhang->HandleRequest(15);
 92         zuzhang->HandleRequest(5);
 93         zuzhang->HandleRequest(31);
 94
 95         delete jingli;
 96         delete zongjian;
 97         delete zuzhang;
 98
 99         return 0;
100 }
101 //////////////////////////////////
102 [[email protected] ~/learn_code/design_pattern/20_chain]$ ./chain
103 总监:批假12天
104 经理:批假15天
105 组长:批假5天
106 经理:31天,时间太长,超过公司规定
时间: 2024-08-01 22:42:35

设计模式——职责链模式(C++实现)的相关文章

17. 星际争霸之php设计模式--职责链模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248202.html============================================

设计模式——职责链模式

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. *在一个纯的职责链模式里面,一个请求必须被某一个处理者对象所接收:在一个不纯的职责链模式里面,一个请求可以最终不被任何接收端对象所接收. 适用性 在以下条件下使用Responsibility 链: 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可动态指定一组对象处理

小菜学设计模式——职责链模式

背景 时间过得真快,转眼又是半年,可是作为一名将要资深的码农,是不是应该加薪了呢?可是说到加薪,经理又要推诿,这个不是我能决定的,你去找总监吧,总监又会说,在等等吧,等这个项目上线不会亏待你的.我的个神呀,这个产品上线估计要到明年春天吧!好吧,关于职责问题,这里就是一个著名的设计模式,职责链模式. 1.使用意图 把用户的请求,层层传递处理,直到这个请求被处理为止. 2.生活实例 工作加薪.请假. 3.Java 例子(框架.JDK .JEE) 暂时没有发现,如果有发现的同学可以提出修改. 4.模式

深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)

模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者和请求的处理者解耦.这就是职责链模式的模式动机. 模式定义职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个

与状态模式相似的设计模式---职责链模式

今天我们要讨论的设计模式与前面提到的状态模式非常相似,他们不能的地方:状态模式是每个具体的状态处理自己状态的事务,若非自己状态处理的数据则将状态移动到一下一个具体状态类处理:而职责链则是根据自己的职责完成本职工作,若不能完成则判断是否已经关联了下一个环节职责,若存在则调用下一环节的处理.他们两个一个是在具体类中已经设定了下一环节,而另外一个则是在客户端先设定好职责链. 什么是职责链模式?使多个对象(职责对象)都有机会处理请求,从而避免了请求发送者与接收者之间的耦合性.将这职责对象连成一条链,使得

PHP设计模式——职责链模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 职责链模式(又叫责任链模式)包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的方法. UML类图: 角色: 抽象处理者(Manager):定义出一个处理请求的接口.如果需要,接口可以定义出一个方法,以设定和返回对下家的引用.这个角色通常由一个抽象类或接口实现. 具体处理者(CommonManager):具体处理者接到请求后,可以

设计模式-职责链模式

1.定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到对象处理它为止.    相信大家都写过if...else或者switch,当条件很多时需要写上数十行代码.如果要修改某些条件或者处理过程,就又要不断地修改这个牛叉的分支语句.这时我们可以采用职责链模式,它是将许多请求的分支或者步骤都独立出来.然后每个独立出来的部分,如果你是最终的处理那么就直接处理并结束,如果不是,那么就连接下一个处理步骤.这样就形成一个处理请求的链

大话设计模式-职责链模式

需求 实现一个公司里请假加薪等流程审批的程序. 实现 级别1 public class Request { private String requestType; private int number; public String getRequestType() { return requestType; } public void setRequestType(String requestType) { this.requestType=requestType; } public int g

JAVA 设计模式 职责链模式

用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 职责链模式是一种行为型模式. 结构 图-职责链模式 Handler : 定义一个处理请求的接口.(可选的)实现设置后继者的方法. abstract class Handler {    protected Handler successor;    public void SetSu

javascript设计模式——职责链模式

前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一系列可能会处理请求的对象被连接成一条链,请求在这些对象之间依次传递,直到遇到一个可以处理它的对象,把这些对象称为链中的节点.本文将详细介绍职责链模式 电商订单 职责链模式的例子在现实中并不难找到,以下就是两个常见的跟职责链模式有关的场景 如果早高峰能顺利挤上公交车的话,那么估计这一天都会过得很开心.