設計模式(二)職責鏈模式 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天假,同意了!
//你請的假事假太長了,不同意!
//請按任意鍵繼續. . .

 

發佈了195 篇原創文章 · 獲贊 41 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章