外觀模式之C++實現
阿新 • • 發佈:2019-02-13
說明:本文僅供學習交流,轉載請標明出處,歡迎轉載!
在我們學習程式設計時常常會用到模組化設計的思想,這一思想是我們首先把要實現的功能用一個模組表示,當用戶想完成某個人物時依次呼叫對應的函式。然而,如果使用者要完成一個很大的任務,則需要呼叫很大模組函式,這樣使用者與各個模組打交道就非常頻繁了,同時也很容易出錯,因為使用者與某個具體模組打交道,耦合度相對比較高。而外觀模式(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設計模式》