1. 程式人生 > >外觀模式之C++實現

外觀模式之C++實現

說明:本文僅供學習交流,轉載請標明出處,歡迎轉載!

            在我們學習程式設計時常常會用到模組化設計的思想,這一思想是我們首先把要實現的功能用一個模組表示,當用戶想完成某個人物時依次呼叫對應的函式。然而,如果使用者要完成一個很大的任務,則需要呼叫很大模組函式,這樣使用者與各個模組打交道就非常頻繁了,同時也很容易出錯,因為使用者與某個具體模組打交道,耦合度相對比較高。而外觀模式(Facade)就在此時可以派上用場了。

        外觀模式的定義:為子系統中的一組介面(相當與上面的模組)提供一個一致的介面,此模式定義了一個高層介面,這個結口使得這一子系統更加容易使用。

        說白了就是

:我們只需呼叫高層的函式介面,而不用關心高層內部呼叫是如何組合底層方法的,更不用關心底層函式是如何實現的。

         外觀模式如下圖所示:


 本圖來自《大話設計模式》網上電子稿   

舉例:

         我們現在需要完成兩個工作:要完成這兩個工作。要完成工作1我們需要依次完成子工作Sub_Work1、Sub_Work3;要完成工作2我們需要依次完成工作Sub_Work2,Sub_Work3,Sub_Work4。為了能讓使用者與這些子工作分離,我們採用外觀模式在中間插入一個工作處理中心Work,這個Work負責處理使用者的需求已經整合相應的底層子系統,程式碼實現如下:

#include<iostream>
using namespace std;


class Sub_Work1//子工作1
{
public:
	void Working1()
	{
		cout<<"Doing Sub-Work1..."<<endl;
	}
};

class Sub_Work2//子工作2
{
public:
	void Working2()
	{
		cout<<"Doing Sub-Work2..."<<endl;
	}
};

class Sub_Work3//子工作3
{
public:
	void Working3()
	{
		cout<<"Doing Sub-Work3..."<<endl;
	}
};

class Sub_Work4//子工作4
{
public:
	void Working4()
	{
		cout<<"Doing Sub-Work4..."<<endl;
	}
};
class Work//總工作,客戶與之打交道
{
private:
	Sub_Work1 w1;
	Sub_Work2 w2;
	Sub_Work3 w3;
	Sub_Work4 w4;
public:
	void Work1()//總工作1
	{
		w1.Working1();
		w3.Working3();
	}
	void Work2()//總工作2
	{
		w2.Working2();
		w3.Working3();
		w4.Working4();
	}
};


int main()//客戶端程式
{
	Work w;
	/*******總工作1******/
	cout<<"開始呼叫總工作1"<<endl;
	w.Work1();

	/*******總工作2******/
	cout<<endl<<"開始呼叫總工作2"<<endl;
	w.Work2();
	return 0;
}

         測試結果:

         

參考資料:

[1]《大話設計模式》

[2]《設計模式之禪》

[3]《HeadFirst設計模式》