0
点赞
收藏
分享

微信扫一扫

【设计模式24】职责链模式


基本概念

【设计模式24】职责链模式_#include

具体案例

【设计模式24】职责链模式_#include_02

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <crtdbg.h>   
#include<unordered_map>

using namespace std;

class Handler
{
public:
	Handler();
	~Handler();
	// 设置继任者
	void setSuccessor(Handler* successor) {
		this->successor = successor;
	}
	// 处理请求的抽象方法
	virtual void HandleRequest(int request) = 0;

private:
protected:
	Handler* successor;
};

class ConcreterHandler1 :public Handler
{
public:
	ConcreterHandler1();
	~ConcreterHandler1();
	void HandleRequest(int request) {
		// 0 - 10 处理此请求
		if (request >= 0 && request < 10) {
			cout << "请求处理:" << typeid(this).name() << request << endl;
		}
		// 转移到下一位
		else if (successor != nullptr) {
			successor->HandleRequest(request);
		}
	}
private:

};

class ConcreteHandler2 :public Handler
{
public:
	ConcreteHandler2();
	~ConcreteHandler2();
	void HandleRequest(int request) {
		if (request >= 10 && request < 20) {
			cout << "请求处理:" << typeid(this).name() << request << endl;
		}
		else if (successor != nullptr) {
			successor->HandleRequest(request);
		}
	}
private:

};

class ConcreteHandler3 :public Handler
{
public:
	ConcreteHandler3();
	~ConcreteHandler3();
	void HandleRequest(int request) {
		if (request >= 20 && request < 30) {
			cout << "请求处理:" << typeid(this).name() << request << endl;

		}
		else if (successor != nullptr) {
			successor->HandleRequest(request);
		}
	}
private:
};

ConcreteHandler3::ConcreteHandler3()
{
}

ConcreteHandler3::~ConcreteHandler3()
{
}

ConcreteHandler2::ConcreteHandler2()
{
}

ConcreteHandler2::~ConcreteHandler2()
{
}

ConcreterHandler1::ConcreterHandler1()
{
}

ConcreterHandler1::~ConcreterHandler1()
{
}

Handler::Handler()
{
}

Handler::~Handler()
{
}

int main(int argc, char** argv)
{
	Handler* myhandle1 = new ConcreterHandler1();
	Handler* myhandle2 = new ConcreteHandler2();
	Handler* myhandle3 = new ConcreteHandler3();

	// 设置职责链上家与下家
	myhandle1->setSuccessor(myhandle2);
	myhandle2->setSuccessor(myhandle3);

	int request[8] = { 2,5,14,22,18,3,27,20 };

	for (auto i : request) {
		myhandle1->HandleRequest(i);
	}
	return 0;
}


举报

相关推荐

0 条评论