Factory模式的两个最重要的功能:
1)定义创建对象的接口,封装对象的创建;
个人见解:核心的主要部分在于一个具体类上,Factory接收到请求自动判断提供什么产品,但是对于一个factory而言,倘若添加一个新的产品,需要做太多的改动,换句话来说,添加一个新的产品必须改动整个factory工厂。
- #include <iostream>
- using namespace std;
- class product
- {
- public:
- virtual void produce(){}; //具体的实现交给子类的函数;
- virtual void sell(){};
- product(){};
- virtual ~product(){};
- };
- class conproduct1:public product
- {
- public:
- void produce()
- {cout<<"Pro conproduct1.."<<endl;}
- void sell()
- {cout<<"Sel conproduct1.."<<endl;}
- };
- class conproduct2:public product
- {
- public:
- void produce()
- {cout<<"Pro conproduct2.."<<endl;}
- void sell()
- {cout<<"Sel conproduct2.."<<endl;}
- };
- class Factory //具体的操作由factory控制选择
- {
- public:
- Factory(){}
- static product *Creatproduct(int a)
- {
- if(a==1) {return new conproduct1();} //生成相对应的pro对象;
- if(a==2) {return new conproduct2();}
- }
- };
- void main()
- {
- Factory *fac=new Factory();
- (fac->Creatproduct(2))->produce();
- }
个人见解:核心在于一个factory的抽象类。相对于1而言,其解决了增加一个新的产品的简单处理,只需要添加一个新的类以及所对应的处理类就能搞定,不需要改变factory工厂。
但是其缺陷在于,只支持一种PRODUCT基类。
- /*****************/
- /*** Product.h ***/
- /*****************/
- #ifndef _PRODUCT_H
- #define _PRODUCT_H
- class Product
- {
- public:
- virtual ~Product()=0;
- protected:
- Product();
- private:
- };
- class ConcreatProduct:public Product
- {
- public:
- ~ConcreatProduct();
- ConcreatProduct();
- };
- #endif
- /*****************/
- /** Product.cpp **/
- /*****************/
- #include "Product.h"
- #include
- using namespace std;
- Product::Product()
- {}
- Product::~Product()
- {}
- ConcreatProduct::ConcreatProduct()
- {
- cout<<"ConcreatProduct.."<
- }
- ConcreatProduct::~ConcreatProduct()
- {}
- /*****************/
- /** Factory.h ****/
- /*****************/
- #ifndef _FACTORY_H_
- #define _FACTORY_H_
- class Product;
- class Factory
- {
- public:
- virtual ~Factory()=0;
- virtual Product* CreateProduct()=0;
- protected:
- Factory();
- };
- class ConcreatFactory:public Factory
- {
- public:
- ~ConcreatFactory();
- ConcreatFactory();
- Product* CreateProduct();
- };
- #endif
- /*****************/
- /** Factory.cpp **/
- /*****************/
- #include "Factory.h"
- #include "Product.h"
- #include
- using namespace std;
- Factory::Factory()
- {}
- Factory::~Factory()
- {}
- ConcreatFactory::ConcreatFactory()
- {
- cout<<"ConcreatFactory..."<
- }
- ConcreatFactory::~ConcreatFactory()
- {}
- Product* ConcreatFactory::CreateProduct()
- {
- return new ConcreatProduct();
- }
- /*****************/
- /** Main.cpp *****/
- /*****************/
- #include "Factory.h"
- #include "Product.h"
- #include
- using namespace std;
- void main()
- {
- Factory* fac=new ConcreatFactory();
- Product*p=fac->CreateProduct();
- }