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