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