设计模式(二)职责链模式 C++

行为型设计模式一共有12个,下面介绍下第一个:职责链模式,它是对象行为型模式

一、意图:
    职责链模式:使得很多对象都有机会处理请求,从而避免请求发送者和接收者之间的耦合关系。
将这些对象形成 一条链,沿着这条链处理请求,之道有一个对象处理为止
二、适用性:
    1、使得多个对象可以处理同一请求,对象请求顺序可自行确定
    2、不明确指定接收者的情况,也就是不知道谁来处理请求的情况下,向指定对象提交一个请求
    3、可处理一个请求的对象,集合被动态的指定
三、参与者
        Handler:定义处理请求的接口
        ConreteHandler:
        1、处理自己负责的请求
        2、访问后继者(上级)
        3、如果可以处理请求,则处理请求,否则讲请求转发给上级
四、效果
    1、降低耦合度
    2、增强指派职责的灵活性
    3、请求到最终还是没有被接受
五、下面用代码说明一下

(我么请个假,先给主管审批,然后是经理审批,最后是老板审批)


#include <iostream>
#include <windows.h>
using namespace std;

//抽象处理者
class Handler
{
public:
	Handler() { m_pNextHandler = NULL; }
	virtual ~Handler() {}

	//设置下一个处理者
	void SetNextHandler(Handler *successor) { m_pNextHandler = successor; }

	//处理请求
	virtual void HandleRequest(int days) = 0;
protected:
	Handler *m_pNextHandler;  // 后继者
};


//具体处理者、主管
class Director :public Handler
{
public:
	//处理请求
	virtual void HandleRequest(int days)
	{
		if (days <= 1)
		{
			cout << "我是主管,有权批准一天假,同意了!" << endl;
		}
		else
		{
			m_pNextHandler->HandleRequest(days);
		}
	}
};

//具体处理者、经理
class Manager :public Handler
{
public:
	//处理请求
	virtual void HandleRequest(int days)
	{
		if (days <= 3)
		{
			cout << "我是经理,有权批准三以下的假,同意了!" << endl;
		}
		else
		{
			m_pNextHandler->HandleRequest(days);
		}
	}
};

//具体处理者、老板
class Boss :public Handler
{
public:
	//处理请求
	virtual void HandleRequest(int days)
	{
		if (days <= 7)
		{
			cout << "我是老板,最多让你请7天假,同意了!" << endl;
		}
		else
		{
			cout << "你请的假事假太长了,不同意!" << endl;
		}
	}
};



//场景
int main()
{
	Handler *director = new Director;
	Handler *manager = new Manager;
	Handler *boss = new Boss;

	//设置责任链
	director->SetNextHandler(manager);
	manager->SetNextHandler(boss);


	director->HandleRequest(1);
	director->HandleRequest(2);
	director->HandleRequest(5);
	director->HandleRequest(8);

	system("pause");
	return 0;
}
//结果:
我是主管,有权批准一天假,同意了!
//我是经理,有权批准三以下的假,同意了
//我是老板,最多让你请7天假,同意了!
//你请的假事假太长了,不同意!
//请按任意键继续. . .

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值