程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 實例解析C++設計形式編程中復雜工廠形式的采用

實例解析C++設計形式編程中復雜工廠形式的采用

編輯:關於C++

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved