设计模式之Factory模式【C++】
//Product.h #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class ProductAbs { public: virtual ~ProductAbs(); virtual void Operate()=0; protected: ProductAbs(); private: }; class ProductImpl1:public ProductAbs { public: ProductImpl1(); ~ProductImpl1(); void Operate(); protected: private: }; class ProductImpl2:public ProductAbs { public: ProductImpl2(); ~ProductImpl2(); void Operate(); protected: private: }; #endif
//Product.cpp #include "Product.h" #include<iostream> using namespace std; //class ProductAbs ProductAbs::ProductAbs() { } ProductAbs::~ProductAbs() { } //class ProductImpl1 ProductImpl1::ProductImpl1() { cout<<"Construct of ProductImpl1."<<endl; } ProductImpl1::~ProductImpl1() { cout<<"Destruct of ProductImpl1."<<endl; } void ProductImpl1::Operate() { cout<<"Operate of ProductImpl1."<<endl; } //class ProductImpl2 ProductImpl2::ProductImpl2() { cout<<"Construct of ProductImpl2."<<endl; } ProductImpl2::~ProductImpl2() { cout<<"Destruct of ProductImpl2."<<endl; } void ProductImpl2::Operate() { cout<<"Operate of ProductImpl2."<<endl; }
//Factory.h #ifndef _FACTORY_H_ #define _FACTORY_H_ enum ID_PRODUCTIMPL //所有类的枚举,以便识别创建不同的类 { ID_PRODUCTIMPL_1, ID_PRODUCTIMPL_2 }; class ProductAbs; class FactoryAbs { public: virtual ~FactoryAbs(); virtual ProductAbs * CreateProduct(ID_PRODUCTIMPL id)=0; protected: FactoryAbs(); private: }; class FactoryImpl:public FactoryAbs { public: FactoryImpl(); ~FactoryImpl(); ProductAbs * CreateProduct(ID_PRODUCTIMPL id); protected: private: }; #endif
//Factory.cpp #include "Product.h" #include "Factory.h" //class FactoryAbs FactoryAbs::FactoryAbs() { } FactoryAbs::~FactoryAbs() { } //class FactoryImpl FactoryImpl::FactoryImpl() { } FactoryImpl::~FactoryImpl() { } ProductAbs * FactoryImpl::CreateProduct(ID_PRODUCTIMPL id) { //根据id创建不同的对象 switch(id) { case 0: return new ProductImpl1(); case 1: return new ProductImpl2(); default: return 0; } }
//Test.cpp #include "Product.h" #include "Factory.h" #include<iostream> using namespace std; void main() { FactoryAbs * factory=new FactoryImpl();//创建工厂 ProductAbs * product=NULL; if(product!=NULL) { delete product; product=NULL; } product=factory->CreateProduct(ID_PRODUCTIMPL_1);//创建ProductImpl1的对象 product->Operate();//使用,与创建相分离 if(product!=NULL) { delete product; product=NULL; } product=factory->CreateProduct(ID_PRODUCTIMPL_2);//创建ProductImpl2的对象 product->Operate();//使用,与创建相分离 if(product!=NULL) { delete product; product=NULL; } if(factory!=NULL) { delete factory; factory=NULL; } }

posted on 2013-11-06 10:44 Anonymous_ 阅读(214) 评论(0) 收藏 举报
浙公网安备 33010602011771号