#include<iostream> #include<vector> usingnamespace std; typedefenumProductTypeTag//Here create the enumerate for products { TypeA, TypeB, TypeC }PRODUCTTYPE; // Here is the product class classProduct { public: virtualvoidShow()= 0; };
//Here are the derived classes of product classProductA : public Product { public: voidShow() { cout<<"I'm ProductA"<<endl; } }; classProductB : public Product { public: voidShow() { cout<<"I'm ProductB"<<endl; } }; classProductC : public Product { public: voidShow() { cout<<"I'm ProductC"<<endl; } }; // Here is the Factory class classFactory { public: Product* CreateProduct(PRODUCTTYPE type) { switch (type) { case TypeA: returnnewProductA(); case TypeB: returnnewProductB(); case TypeC: returnnewProductC(); default: returnNULL; } } };
intmain(int argc, char *argv[]) { // First, create a factory object Factory *ProductFactory = newFactory(); //using product point to get the object's memory 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 the memory and set the point to NULL delete ProductFactory; ProductFactory = NULL; delete productObjA; productObjA = NULL; delete productObjB; productObjB = NULL; delete productObjC; productObjC = NULL; return0; }