Chain of Responsibility责任链模式(C++责任链模式)

Chainof Responsibility责任链模式:相当于MFC,windows程序设计窗口中的消息机制这类。

MFC中,消息是通过一个向上递交的方式进行处理,例如一个WM_COMMAND消息的处理流程可能为:

1) MDI主窗口(CMDIFrameWnd)收到命令消息WM_COMMAND,其ID位ID_×××;

2) MDI主窗口将消息传给当前活动的MDI子窗口(CMDIChildWnd);

3) MDI子窗口给自己的子窗口(View)一个处理机会,将消息交给View;

4) View检查自己Message Map;

5) 如果View没有发现处理该消息的程序,则将该消息传给其对应的Document对象;否则View处理,消息流程结束。

6) Document检查自己Message Map,如果没有该消息的处理程序,则将该消息传给其对象的DocumentTemplate处理;否则自己处理,消息流程结束;

7) 如果在6)中消息没有得到处理,则将消息返回给View;

8) View再传回给MDI子窗口;

9) MDI子窗口将该消息传给CwinApp对象,CwinApp为所有无主的消息提供了处理。

MFC提供了消息的处理的链式处理策略,处理消息的请求将沿着预先定义好的路径依

次进行处理。消息的发送者并不知道该消息最后是由那个具体对象处理的,当然它也无须也不想知道,但是结构是该消息被某个对象处理了,或者一直到一个终极的对象进行处理了。

Chain of Responsibility模式描述其实就是这样一类问题将可能处理一个请求的对象链接成一个链,并将请求在这个链上传递,直到有对象处理该请求(可能需要提供一个默认处理所有请求的类,例如MFC中的CwinApp类)。

//////////////////////////////////////////////////////////////////////////
// author:Jeson Yang
// date:2014.12.9
// filename:main.cpp
//////////////////////////////////////////////////////////////////////////
#include<iostream>
using namespace std;
class Handles
{
public:
	virtual ~Handles(){}
	virtual void HandlesRequest()=0;
	void SetSussessor(Handles* succ){m_succ=succ;};
	Handles* GetSussessor(){return m_succ;}
protected:
	Handles(){m_succ=0;}
	Handles(Handles* succ){m_succ=succ;}
private:
	Handles* m_succ;
};

class ConcreteHandleA:public Handles
{
public:
	ConcreteHandleA(){};
	~ConcreteHandleA(){};
	ConcreteHandleA(Handles* succ):Handles(succ){}
	void HandlesRequest()
	{
		if(this->GetSussessor()!=0)
		{
			cout<<"To Next Succ"<<endl;
			this->GetSussessor()->HandlesRequest();
		}
		else
		{
			cout<<"A next no more,Let do it myself"<<endl;
		}
	}
};

class ConcreteHandleB:public Handles
{
public:
	ConcreteHandleB(){};
	~ConcreteHandleB(){};
	ConcreteHandleB(Handles* succ):Handles(succ){}
	void HandlesRequest()
	{
		if(this->GetSussessor()!=0)
		{
			cout<<"To Next Succ"<<endl;
			this->GetSussessor()->HandlesRequest();
		}
		else
		{
			cout<<"B next no more,Let do it myself"<<endl;
		}
	}
};

void main()
{
	Handles* h1=new ConcreteHandleA();
	Handles* h2=new ConcreteHandleB();
	h1->SetSussessor(h2);
	h1->HandlesRequest();

	delete h2;
	delete h1;
}
时间: 2024-10-23 05:41:09

Chain of Responsibility责任链模式(C++责任链模式)的相关文章

Chain Of Responsibility(职责连)-对象行为型模式

1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 2.动机 给多个对象处理一个请求的机会,从而解耦发送者和接收者. 3.适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 4.结构 5.代码实例 //Handler.h #include <memory> cla

Java 实现责任链(Chain of Responsibility)模式

类图 /** * 抽象责任 * @author stone * */ public abstract class IFilter { private IFilter successor; public IFilter getSuccessor() { return successor; } public void setSuccessor(IFilter successor) { this.successor = successor; } public abstract void handleF

[设计模式-行为型]责任链模式(Chain of Responsibility)

概括 名称 Chain of Responsibility 结构 动机 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 解析 形象比喻: 晚上去上英语课, 为了好开溜坐到了最后一排, 哇, 前面坐了好几个漂亮的MM 哎

23种设计模式之责任链模式(Chain of Responsibility)

责任链模式是一种对象的行为型模式,避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止.责任链模式不保证每个请求都被接受,由于一个请求没有明确的接收者,那么就不能保证它一定会被处理. 优点: 1)降低了耦合度. 2)增加向对象指定责任的灵活性. 3)由于在一个类中产生的事件可以被发送到组成中的其它类处理器上,类的集合可以作为一个整体. 使用场景: 1)多个对象可以处理一个请求,而其处理器却是未知的. 2)想要在不指定确

GOF23设计模式之责任链模式(chain of responsibility)与结构型模式总结经典

 责任链模式:Chain of responsibility      将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象. 场景:      打牌时,轮流出牌.      接力赛跑      大学中,奖学金审批.      公司中,公文审批.   结构型模式汇总: 代理模式:为真实对象提供一个代理,从而控制对真实对象的访问. 适配器模式:使原本由于接口不兼容不能一起工作的类,可以一起工作. 桥

PHP设计模式学习笔记: 责任链模式(Chain of Responsibility)

// 抽象书本类 abstract class AbstractBookTopic { abstract function getTopic(); abstract function getTitle(); abstract function setTitle($title_in); } // 书本类,继承自抽象书本类 class BookTopic extends AbstractBookTopic { private $topic; private $title; function __co

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

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

责任链模式-Chain of Responsibility(Java实现), 例1

责任链模式-Chain of Responsibility, 例1 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. Trouble类 本类是:待责任链来处理的问题Trouble类. 本例子较简单, Trouble只有一个int型作为待处理的编号. public class Trouble { private int number; public Trouble(int number) { this.number

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

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