行爲型設計模式一共有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天假,同意了!
//你請的假事假太長了,不同意!
//請按任意鍵繼續. . .