责任链模式

责任链模式,请求处理类包含指向父类(下家)的指针,在本单元无法处理时将请求传递给下家。

#include <iostream>
using namespace std;

class request
{
public:
	request(int _need_speed)
	{
		need_seed = _need_speed;
	}

public:
	int need_seed;
};

class tool_viecal	//请求处理单元基类,定义处理请求接口
{
public:
	tool_viecal()
	{
		nest = NULL;
	}
	void setnest(tool_viecal* _nest)//下家
	{
		nest = _nest;
	}
	virtual void handle_request(request* request) = 0;

protected:
	tool_viecal* nest;//下家
};

class onfoot :public tool_viecal
{
public:
	onfoot(int max=10)
	{
		max_speed = max;
	}

	virtual void handle_request(request* request)//请求处理函数
	{
		if (max_speed > request->need_seed)
		{
			cout << "步行!\n";
		}
		else
		{
			if (nest != NULL)
				nest->handle_request(request);
			else
				cout << "你需要一个时光机器!\n";
		}
	}
	
public:
	int max_speed;
};

class bybike :public tool_viecal
{
public:
	bybike(int max = 50)
	{
		max_speed = max;
	}

	virtual void handle_request(request* request)
	{
		if (max_speed > request->need_seed)
		{
			cout << "ofo!\n";
		}
		else
		{
			if (nest != NULL)
				nest->handle_request(request);
			else
				cout << "你需要一个时光机器!\n";
		}
	}

public:
	int max_speed;
};

class bybus :public tool_viecal
{
public:
	bybus(int max = 100)
	{
		max_speed = max;
	}

	virtual void handle_request(request* request)
	{
		if (max_speed > request->need_seed)
		{
			cout << "bus!\n";
		}
		else
		{
			if (nest != NULL)
				nest->handle_request(request);
			else
				cout << "你需要一个时光机器!\n";
		}
	}

public:
	int max_speed;
};

void main()
{
	request *req = new request(51);

	tool_viecal* tool1 = new onfoot(15);
	tool_viecal* tool2 = new bybike();
	tool_viecal* tool3 = new bybus();

	tool1->setnest(tool2);
	tool2->setnest(tool3);

	tool1->handle_request(req);

	delete tool3;
	delete tool2;
	delete tool1;
	delete req;

	return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值