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; }