Chain of Responsibility Pattern

1.Chain of Responsibility模式:将可能处理一个请求的对象链接成一个链,并将请求在这个链上传递,直到有对象处理该请求(可能需要提供一个默认处理所有请求的类,例如MFC中的CwinApp类)。

2.Chain of Responsibility Pattern 结构图

3.实现

 1 #ifndef _HANDLE_H_
 2 #define _HANDLE_H_
 3
 4 class Handle
 5 {
 6 public:
 7     virtual ~Handle();
 8     virtual void HandleRequest() = 0;
 9     void SetSuccessor(Handle* succ);
10     Handle* GetSuccessor();
11
12 protected:
13     Handle();
14     Handle(Handle* succ);
15
16 private:
17     Handle* _succ;
18 };
19
20 class ConcreteHandleA:public Handle
21 {
22 public:
23     ConcreteHandleA();
24     ~ConcreteHandleA();
25     ConcreteHandleA(Handle* succ);
26     void HandleRequest();
27
28 protected:
29 private:
30 };
31
32 class ConcreteHandleB:public Handle
33 {
34 public:
35     ConcreteHandleB();
36     ~ConcreteHandleB();
37     ConcreteHandleB(Handle* succ);
38     void HandleRequest();
39 protected:
40 private:
41 };
42
43 #endif

Handle.h

 1 #include "Handle.h"
 2 #include <iostream>
 3 using namespace std;
 4
 5 Handle::Handle()
 6 {
 7     _succ = 0;
 8 }
 9 Handle::~Handle()
10 {
11     delete _succ;
12 }
13 Handle::Handle(Handle* succ)
14 {
15     this->_succ = succ;
16 }
17 void Handle::SetSuccessor(Handle* succ)
18 {
19     _succ = succ;
20 }
21 Handle* Handle::GetSuccessor()
22 {
23     return _succ;
24 }
25 void Handle::HandleRequest()
26 {
27
28 }
29 ConcreteHandleA::ConcreteHandleA()
30 {
31
32 }
33 ConcreteHandleA::ConcreteHandleA(Handle* succ):Handle(succ)
34 {
35
36 }
37 ConcreteHandleA::~ConcreteHandleA()
38 {
39
40 }
41 void ConcreteHandleA::HandleRequest()
42 {
43     if (this->GetSuccessor() != 0)
44     {
45         cout<<"ConcreteHandleA 我把处理权给后继节点....."<<endl;
46         this->GetSuccessor()->HandleRequest();
47     }
48     else
49     {
50         cout<<"ConcreteHandleA 没有后继了,我必须自己处理...."<<endl;
51     }
52 }
53 ConcreteHandleB::ConcreteHandleB()
54 {
55
56 }
57 ConcreteHandleB::ConcreteHandleB(Handle* succ):Handle(succ)
58 {
59
60 }
61 ConcreteHandleB::~ConcreteHandleB()
62 {
63
64 }
65 void ConcreteHandleB::HandleRequest()
66 {
67     if (this->GetSuccessor() != 0)
68     {
69         cout<<"ConcreteHandleB 我把处理权给后继节点....."<<endl;
70         this->GetSuccessor()->HandleRequest();
71     }
72     else
73     {
74         cout<<"ConcreteHandleB 没有后继了,我必须自己处理...."<<endl;
75     }
76 }

Handle.cpp

 1 #include "Handle.h"
 2 #include <iostream>
 3 using namespace std;
 4
 5 int main(int argc,char* argv[])
 6 {
 7     Handle* h1 = new ConcreteHandleA();
 8     Handle* h2 = new ConcreteHandleB();
 9     h1->SetSuccessor(h2);
10     h1->HandleRequest();
11     return 0;
12 }

main.cpp

时间: 2024-11-09 09:33:09

Chain of Responsibility Pattern的相关文章

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

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

Design Patterns Uncovered: The Chain Of Responsibility Pattern

Chain of Responsibility in the Real World The idea of the Chain Of Responsibility is that it avoids coupling the sender of the request to the receiver, giving more than one object the opportunity to handle the request.  This process of delegation app

第 17 章 责任链模式【Chain of Responsibility Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> 中国古代对妇女制定了“三从四德”的道德规范,“三从”是指“未嫁从父.既嫁从夫.夫死从子”,也就是说一个女性,在没有结婚的时候要听从于父亲,结了婚后听从于丈夫,丈夫死了还要听儿子的,举个例子来说,一个女的要出去逛街,同样这样的一个请求,在她没有出嫁前她必须征得父亲的同意,出嫁之后必须获得丈夫的许可,那丈夫死了怎么办?一般都是男的比女的死的早,还要问问儿子是否允许自己出去逛街,估计你下边马上要问要是没有儿子怎么办?请示小叔子.侄子

责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)

责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 责任链模式中,每个对象通过持有对下家的引用而链接起来,形成一条链条,串联起来多个处理对象. 在责任链模式中,请求在链上进行传递,直到链上的某一个对象决定处理此请求. 发出这个请求的客户端程序并不知道到底是哪一个对象具体的处理了请求 这使得系统可以在不影响客户

&quot;围观&quot;设计模式(22)--行为型之职责链模式(Chain Of Responsibility Pattern)

责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象.每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象.该模式还描述了往该处理链的末尾添加新的处理对象的方法.----WIKIPEDIA 个人的理解 责任链模式用到了链表的数据结构,存在一定的次序性,A->B->C这样的一条链表,在责任链模式中,请求交给A进行处理,如果A处理不了交给B,B如果处理的了进行处理,否则交给C处理,模式的关键在于构建这样的一个链表

设计模式(行为型)之职责链模式(Chain of Responsibility Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之状态模式(State Pattern)>http://blog.csdn.net/yanbober/article/details/45502665 概述 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链

责任链模式(Chain of responsibility pattern)

鲁春利的工作笔记,好记性不如烂笔头 本文出自 "闷葫芦的世界" 博客,请务必保留此出处http://luchunli.blog.51cto.com/2368057/1892886

责任链模式(Chain of Responsibility Pattern)

责任链模式:可以为某个请求创建一个对象链.每个对象依序检查此请求,并对其处理,或者把它传给链中的下一个对象. 责任链上的对象负责处理请求,客户只需要将请求发送到责任链上即可,无需关心处理的细节和请求的传递,所以请求的发送者和接收者解耦了. 类图: 具体例子: 一个Logger日志抽象类,三个具体日志类继承Logger,责任链的顺序是HighestLogger->MiddleLogger->OrdinaryLogger()(顺序是自己定的,可以从高级到低级也可以低级到高级,看具体实现) 为了判断

JAVA设计模式之 职责链模式【Chain of Responsibility Pattern】

一.概述 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止.职责链模式是一种对象行为型模式. 核心在于引入一个抽象处理者类 二.适用场景 请求的链式处理,多个对象可以处理同一请求.但是具体由哪个对象来处理由运行时系统根据条件判断确定. 如请假业务场景: 三.UML类图 四.参与者 1.Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不同的具体处理者处理请求的方式不同,因此在其中定义了