實例解析C++設計形式編程中簡略工場形式的采取。本站提示廣大學習愛好者:(實例解析C++設計形式編程中簡略工場形式的采取)文章只能為提供參考,不一定能成為您想要的結果。以下是實例解析C++設計形式編程中簡略工場形式的采取正文
簡略工場形式中專門界說一個類來擔任創立其他類的實例,被創立的實例平日都具有配合的父類。它又稱為靜態工場辦法形式,屬於類的創立型形式。
簡略工場形式的UML類圖
簡略工場形式的法式經由過程封裝繼續來下降法式的耦合度,設計形式使得法式加倍的靈巧,易修該,易於復用。
簡略工場是在工場類中做斷定,從而發明響應的產物。
簡略工場形式的本質是由一個工場類依據傳入的參數,靜態決議應當創立哪個產物類(這些產物類繼續自一個父類或接口)的實例。
該形式中包括的腳色及其職責
1.工場(Creator)腳色
簡略工場形式的焦點,它擔任完成創立一切實例的外部邏輯。工場類可以被外界直接挪用,創立所需的產物對象。
2.籠統(Product)腳色
簡略工場形式所創立的一切對象的父類,它擔任描寫一切實例所共有的公共接口。
3.詳細產物(Concrete Product)腳色
是簡略工場形式的創立目的,一切創立的對象都是充任這個腳色的某個詳細類的實例。
普通來說它是籠統產物類的子類,完成了籠統產物類中界說的一切接口辦法。
簡略工場形式的特色:
簡略工場形式的創立目的,一切創立的對象都是充任這個腳色的某個詳細類的實例。
在這個形式中,工場類是全部形式的症結地點。它包括需要的斷定邏輯,可以或許依據外界給定的信息,決議畢竟應當創立哪一個詳細類的對象。用戶在應用時可以直接依據工場類去創立所需的實例,而無需懂得這些對象是若何創立和若何組織的。有益於全部軟件系統構造的優化。
不難發明,簡略工場形式的缺陷也正表現在其工場類上,因為工場類集中了一切實例的創立邏輯,所以“高內聚”方面做的其實不好。別的,當體系中的詳細產物類赓續增多時,能夠會湧現請求工場類也要做響應的修正,擴大性其實不很好。
舉個例子:有一家臨盆處置器核的廠家,它只要一個工場,可以或許臨盆兩種型號的處置器核。客戶須要甚麼樣的處置器核,必定要顯示地告知臨盆工場。
上面給出一種完成計劃。
#include <iostream> using namespace std; enum CoreType { CORE_A, CORE_B }; class SingleCore { public: virtual void Show() = 0; }; /* * A 型號單核 */ class SingleCoreA: public SingleCore { public: void Show() { cout<<"show SingleCoreA"<<endl; } }; /* * B 型號單核 */ class SingleCoreB: public SingleCore { public: void Show() { cout<<"show SingleCoreB"<<endl; } }; /* * 獨一的工場,可以臨盆單核 兩種型號的處置器 */ class Factory { public: SingleCore* CreateSingleCore(CoreType ctype) { switch(ctype) { case CORE_A: return new SingleCoreA(); case CORE_B: return new SingleCoreB(); default: return NULL; } } }; int main() { Factory *pstFactory; SingleCore *pstSingleCore; pstFactory = new Factory(); /* * 臨盆A核 */ pstSingleCore = pstFactory->CreateSingleCore(CORE_A); pstSingleCore->Show(); system("pause"); /* * 臨盆B核 */ pstSingleCore = pstFactory->CreateSingleCore(CORE_B); pstSingleCore->Show(); /* * 臨盆A核 */ pstSingleCore = pstFactory->CreateSingleCore(CORE_A); pstSingleCore->Show(); /* * 臨盆A核 */ pstSingleCore->Show(); system("pause"); /* * 臨盆B核 */ pstSingleCore = pstFactory->CreateSingleCore(CORE_B); pstSingleCore->Show(); return 0; }
運轉成果:
show SingleCoreA 請按隨意率性鍵持續. . . show SingleCoreB show SingleCoreA show SingleCoreA 請按隨意率性鍵持續. . . show SingleCoreB Press any key to continue