Chain Of Responsibility模式
来源:互联网 发布:匿名发短信软件 编辑:程序博客网 时间:2024/05/22 17:13
1、作用
假设存在一个请求以及多个对象。为了使多个对象都有机会处理这个请求,将这些对象连成一条链,并沿着该链传递这个请求,直到有一个对象处理请求为止。
举一个例子。在《步步惊心》中,假如康熙皇帝在太和殿要召见马尔泰若曦,皇帝得先通知旁边的太监李德全,然后李德全高喊“传马尔泰若曦进谏”,接着站在太和殿外的太监依次高喊“传马尔泰若曦进谏”,直到有一个太监传到马尔泰若曦。在这里中,“召见马尔泰若曦”就是一个请求,而那些太监就是处理该请求的多个对象。请求一直传递直到有对象处理了该请求。
2、结构图
3、Code --C++
以下代码采用链表形式实现责任者链模式。实现要点有:
(1)处理者节点是基类,对请求的处理过程在各个派生类中实现。
(2)将请求丢给处理者链表,由处理者链表负责传递。
// 处理者节点基类
class CHandlerNode
{
public:
CHandlerNode(CHandlerNode *pNextCHandlerNode = NULL);
virtual ~CHandlerNode();
public:
virtual void HandleRequest() = 0;
public:
CHandlerNode *m_pNextCHandlerNode;
}
// 处理者链类
class CHandlerChain
{
public:
CHandlerChain();
~CHandlerChain();
public:
AddHandlerNode(CHandlerNode *pCHandlerNode);
DestroyHandlerNode();
void Process(void *Request);
public:
CHandlerNode *m_pCHandlerNodeHead;
}
// 处理者A类
class CHandlerRuquestA : public CHandlerNode
{
public:
CHandlerRuquestA();
virtual ~CHandlerRuquestA();
public:
virtual void HandleRequest();
}
// 处理者B类
class CHandlerRuquestB : public CHandlerNode
{
public:
CHandlerRuquestB();
virtual ~CHandlerRuquestB();
public:
virtual void HandleRequest();
}
// Main
void main()
{
CHandlerChain ObjCHandlerChain;
ObjCHandlerChain.AddHandlerNode(::new CHandlerRuquestA());// 处理者A加入链表
ObjCHandlerChain.AddHandlerNode(::new CHandlerRuquestB());// 处理者B加入链表
ObjCHandlerChain.Process(void *Request); // 处理请求...
ObjCHandlerChain.DestroyHandlerNode();
}
- Chain of responsibility模式
- Chain of Responsibility模式
- Chain Of Responsibility模式
- Chain Of Responsibility模式
- Chain of Responsibility 模式
- Chain of Responsibility模式
- Chain of Responsibility 模式
- Chain of Responsibility模式
- Chain of Responsibility模式
- Chain of Responsibility模式
- Chain of Responsibility模式
- Chain of Responsibility模式
- 模式中的chain of responsibility
- Chain of Responsibility设计模式
- Chain of Responsibility设计模式
- Chain Of Responsibility-----设计模式
- 设计模式之 Chain of Responsibility 模式
- 设计模式之Chain of Responsibility模式
- SQL Server 2008安装和配置图解
- VC++ STATIC 控件显示ICON 或者BITMAP
- 指向指针的指针的作用
- 马士兵J2SE-第八章-流
- 多线程练习----哲学家问题
- Chain Of Responsibility模式
- 实现分页的另类代码
- 一个很强的基于面向对象的SAP邮件发送
- 学习如何在netfilter上开发一个自定义hook
- java 数据库结果集的处理
- 关于OMAP4430-PandaBoard驱动
- flex容易被忽略的地方
- Android下常见的内存泄露 避免方式
- 索引碎片判断及整理、自动维护清理索引碎片