Chain of Responsibility模式

有合适的处理对象就处理,没有就给下一个

这里简化了,有下一个就给下一个

handle.h

#ifndef _HANDLE_H

#define _HANDLE_H

#include <iostream>

using namespace std;

class Handle

{

public:

virtual ~Handle() {

}

Handle() {

}

Handle(Handle* succ) : _succ(succ) {

}

virtual void HandleRequest()=0;

public:

Handle* _succ;

};

class ConcreteHandleA : public Handle

{

public:

ConcreteHandleA() {

}

~ConcreteHandleA() {

}

ConcreteHandleA(Handle* succ) : Handle(succ) {

}

void HandleRequest() {

if (_succ != NULL) {

_succ->HandleRequest();

} else {

cout << "ConcreteHandleA:HandleRequest" << endl;

}

}

};

class ConcreteHandleB : public Handle

{

public:

ConcreteHandleB() {

}

~ConcreteHandleB() {

}

ConcreteHandleB(Handle* succ) : Handle(succ) {

}

void HandleRequest() {

if (_succ != NULL) {

_succ->HandleRequest();

} else {

cout << "ConcreteHandleA:HandleRequest" << endl;

}

}

};

#endif // _HANDLE_H

handle.cpp

#include "handle.h"

int main()

{

Handle* handleA = new ConcreteHandleA;

Handle* handleB = new ConcreteHandleB(handleA);

handleB->HandleRequest();

return 0;

}

编译:make handle

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容