设计模式-行为-职责链

来源:互联网 发布:淘宝双11海报素材 编辑:程序博客网 时间:2024/05/17 23:37
#pragma once#ifndef CHAINOFRESPONSIBILITY_H #define CHAINOFRESPONSIBILITY_H #include <stdio.h> // 抽象基类,定义一个处理请求的接口 class Handler { public: Handler(Handler *pSuccessor = NULL); virtual ~Handler(); // 纯虚函数,由派生类实现 virtual void HandleRequest() = 0; protected: Handler* m_pNextHandler; //if pNextHandler is null,handler it itself}; class ConcreateHandler1 : public Handler { public: ConcreateHandler1(Handler *pNextHandler = NULL) : Handler(pNextHandler){} virtual ~ConcreateHandler1(){} virtual void HandleRequest(); }; class ConcreateHandler2 : public Handler { public: ConcreateHandler2(Handler *pNextHandler = NULL) : Handler(pNextHandler){} virtual ~ConcreateHandler2(){} virtual void HandleRequest(); }; #endif 

#include "StdAfx.h"#include "chainofresponsibility_impl.h"#include <iostream> Handler::Handler(Handler *pNextHandler /* = NULL*/) : m_pNextHandler(pNextHandler) { } Handler::~Handler() { delete m_pNextHandler; m_pNextHandler = NULL; } void ConcreateHandler1::HandleRequest() { if (m_pNextHandler) { std::cout <<"HandleRequest not by ConcreateHandler1,Transfer Next\n";m_pNextHandler->HandleRequest(); } else { std::cout << "HandleRequest by ConcreateHandler1\n"; } }void ConcreateHandler2::HandleRequest() { if (m_pNextHandler) { std::cout <<"HandleRequest not by ConcreateHandler2,Transfer Next\n";m_pNextHandler->HandleRequest(); } else { std::cout << "HandleRequest by ConcreateHandler2\n"; } } 

// ChainOfResponsibility.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "chainofresponsibility_impl.h"#include <stdlib.h>//使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. //将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. int _tmain(int argc, _TCHAR* argv[]){// p2::handlerequest-->p1::handlerequestHandler *p1 = new ConcreateHandler1(/*pNextHandler*/); Handler *p2 = new ConcreateHandler2(p1); p2->HandleRequest(); delete p2; system("pause");return 0;}

阅读全文
0 0
原创粉丝点击