设计模式 责任链模式

在这里插入图片描述
主要是的是在基类中要有一个基类指针,在子类中这个基类指针指向一个父类对象,然后就可以调用父类对象的处理方法,层层传递。
但是《设计模式:…》中说的有点模糊,在网上看到这个写的不错,我稍作修改放上来:

#include<iostream>
using namespace std;

class Handler
{
public:
	void setNextHandler(Handler* h)
	{
		nextHandler = h;
	}
	virtual void  responseRequest(int days) = 0;
	Handler() 
	{
		nextHandler = nullptr;
	}

	virtual ~Handler() {};
protected:
	Handler* nextHandler;
};

class Director :public Handler
{
public:
	virtual void responseRequest(int days)
	{
		cout << "员工:我想请" << days << "天假;" << endl;
		if (days <= 1)
		{
			cout << "主管:我可以批你1天假。" << endl;
		}
		else
		{
			cout << "主管:我不能批你" << days << "天假,我需要上报。" << endl;
			nextHandler->responseRequest(days);
		}
	}
};

class Manager : public Handler
{
public:
	virtual void responseRequest(int days)
	{
		if (days <= 3)
		{
			cout << "经理:我可以批你" << days << "天假。" << endl;
		}
		else
		{
			cout << "经理:我不能批你" << days << "天假,我需要上报。" << endl;
			nextHandler->responseRequest(days);
		}
	}
};

class Boss : public Handler
{
public:
	virtual void responseRequest(int days)
	{
		if (days <= 7)
		{
			cout << "老板:我可以批你" << days << "天假。" << endl;
		}
		else
		{
			cout << "老板:我不能批你" << days << "天假,时间太长,驳回。" << endl;
		}
	}
};

class Staff
{
public:
	Staff(Director* pd = 0) :pDirector(pd) {}
	void request(int days)
	{
		if (pDirector)
			pDirector->responseRequest(days);
	}
	void setDirector(Director* pd)
	{
		pDirector = pd;
	}
private:
	Director* pDirector;
};

int main()
{
	Boss *pBoss = new Boss();
	Manager *pManager = new Manager();
	Director *pDirector = new Director();
	Staff *pStaff = new Staff(pDirector);
	pDirector->setNextHandler(pManager);
	pManager->setNextHandler(pBoss);
	pStaff->request(8);
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值