Factory模式
2015-11-25 17:16
344 查看
Factory模式的两个重要功能:
1)定义创建对象的接口,封装了对象的创建;
2)使得具体化类的工作延迟到了子类中。
声明一个创建对象的接口,并封装了对象的创建过程的Factory的结构示意图为:
Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化。
图二
图二中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图二和图一的区别所在。
完整代码示例:
示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create***Product()即可。
1)定义创建对象的接口,封装了对象的创建;
2)使得具体化类的工作延迟到了子类中。
声明一个创建对象的接口,并封装了对象的创建过程的Factory的结构示意图为:
Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化。
图二
图二中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图二和图一的区别所在。
完整代码示例:
//Product.h #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Product { public: virtual ~Product() =0; protected: Product(); //屏蔽构造函数 private: }; class ConcreteProduct:publicProduct { public: ~ConcreteProduct(); ConcreteProduct(); protected: private: }; #endif //~_PRODUCT_H_
//Product.cpp #include "Product.h" #include<iostream> using namespace std; Product::Product() { } Product::~Product() { } ConcreteProduct::ConcreteProduct() { cout<<"ConcreteProduct...."<<endl; } ConcreteProduct::~ConcreteProduct() { }
//Factory.h #ifndef _FACTORY_H_ #define _FACTORY_H_ class Product; class Factory { public: virtual ~Factory() = 0; virtual Product* CreateProduct() = 0; protected: Factory(); private: }; class ConcreteFactory:public Factory { public: ~ConcreteFactory(); ConcreteFactory(); Product* CreateProduct(); protected: private: }; #endif //~_FACTORY_H_
//Factory.cpp #include "Factory.h" #include "Product.h" #include <iostream> using namespace std; Factory::Factory() { } Factory::~Factory() { } ConcreteFactory::ConcreteFactory() { cout<<"ConcreteFactory....."<<endl; } ConcreteFactory::~ConcreteFactory() { } Product* ConcreteFactory::CreateProduct(){ return new ConcreteProduct(); }
//main.cpp #include "Factory.h" #include "Product.h" #include <iostream> using namespace std; int main(int argc,char* argv[]) { Factory* fac = new ConcreteFactory(); Product* p = fac->CreateProduct(); return 0; }
示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create***Product()即可。
相关文章推荐
- 到底应该做些啥?
- 学习JavaScript设计模式(多态)
- DES算法解析
- ubuntu开启ssh服务
- RSA算法解析
- cygwin命令(一)
- MD5算法解析
- Android 首次开机优化
- eDisMax查询解析器
- 关于12306网站中无法修改或注册学生优惠区间的问题
- Android应用性能剖析全攻略
- 1-2-09:整型与布尔型的转换
- jfinal集成spring cxf做webservice服务
- Linux获取系统当前时间(精确到毫秒)
- Dialog和Toast
- C语言的负数扩充
- 开源项目9GAG源码解析与Material改造(一)
- Centos7 Lnmp Laravel
- 获取子进程终止状态:wait和waitpid
- 【第13周-图项目4——floyd算法的验证】