實例解析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