行为型设计模式一共有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天假,同意了!
//你请的假事假太长了,不同意!
//请按任意键继续. . .