C++設計形式之簡略工場形式實例。本站提示廣大學習愛好者:(C++設計形式之簡略工場形式實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++設計形式之簡略工場形式實例正文
成績描寫
之前在公司做了一個windows 8平台的浏覽器。起首,須要將電子書中的內容襯著到屏幕上,而電子書每頁都包括各類各樣的內容,好比:圖形、圖象和文字等等;分歧的內容,就是分歧的對象;在將分歧的內容襯著到屏幕上之前,就須要new操作,樹立分歧的對象,然後再在屏幕長進行描寫。這個時刻,就須要停止許多new操作,new操作散布在代碼的分歧處所,治理起來很費事,並且也很亂,到前期擴大和保護的時刻,有的時刻,對象多的閃開發人員不曉得這個對象是干甚麼的,這就增長了難度;同時,new操作,都邑有對應的異常處置,最初,就會發明,在代碼中,new了一個對象,然後,就隨著一段異常處置代碼,這時候編碼變的極端凌亂和癡肥。那末怎樣辦?怎樣辦?此時,我們須要一個新的類,專門從事對象的樹立和釋放,以後,對象的各類操作,和這個類沒有任何干系。這個專門樹立對象的類,向外暴漏創立對象的接口,供內部挪用。
工場形式有一種異常抽象的描寫,樹立對象的類就如一個工場,而須要被樹立的對象就是一個個產物;在工場中加工產物,應用產物的人,不消在意產物是若何臨盆出來的。從軟件開辟的角度來講,如許就有用的下降了模塊之間的耦合。
UML類圖
關於工場形式,詳細上可以分為三類:
1.簡略工場形式;
2.工場辦法形式;
3.籠統工場形式。
關於下面的三種工場形式,從上到下慢慢籠統,而且更具普通性。而這篇博文重要講的是簡略工場形式,後兩種會在以後的博文中接著總結。
ProductA、ProductB和ProductC繼續自Product虛擬類,Show辦法是分歧產物的自描寫;Factory依附於ProductA、ProductB和ProductC,Factory依據分歧的前提創立分歧的Product對象。
實用場所
1.在法式中,須要創立的對象許多,招致對象的new操作多且雜時,須要應用簡略工場形式;
2.因為對象的創立進程是我們不須要去關懷的,而我們重視的是對象的現實操作,所以,我們須要分別對象的創立和操作兩部門,如斯,便利前期的法式擴大和保護。
代碼完成:
/*
** FileName : SimpleFactoryPatternDemo
** Author : Jelly Young
** Date : 2013/11/17
** Description : More information
*/
#include <iostream>
#include <vector>
using namespace std;
typedef enum ProductTypeTag
{
TypeA,
TypeB,
TypeC
}PRODUCTTYPE;
// Here is the product class
class Product
{
public:
virtual void Show() = 0;
};
class ProductA : public Product
{
public:
void Show()
{
cout<<"I'm ProductA"<<endl;
}
};
class ProductB : public Product
{
public:
void Show()
{
cout<<"I'm ProductB"<<endl;
}
};
class ProductC : public Product
{
public:
void Show()
{
cout<<"I'm ProductC"<<endl;
}
};
// Here is the Factory class
class Factory
{
public:
Product* CreateProduct(PRODUCTTYPE type)
{
switch (type)
{
case TypeA:
return new ProductA();
case TypeB:
return new ProductB();
case TypeC:
return new ProductC();
default:
return NULL;
}
}
};
int main(int argc, char *argv[])
{
// First, create a factory object
Factory *ProductFactory = new Factory();
Product *productObjA = ProductFactory->CreateProduct(TypeA);
if (productObjA != NULL)
productObjA->Show();
Product *productObjB = ProductFactory->CreateProduct(TypeB);
if (productObjB != NULL)
productObjB->Show();
Product *productObjC = ProductFactory->CreateProduct(TypeC);
if (productObjC != NULL)
productObjC->Show();
delete ProductFactory;
ProductFactory = NULL;
delete productObjA;
productObjA = NULL;
delete productObjB;
productObjB = NULL;
delete productObjC;
productObjC = NULL;
return 0;
}