设计模式--创建型-FactoryMethod(工厂方法)
2013-10-31 23:07
836 查看
设计模式--创建型-FactoryMethod(工厂方法)
1. 意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
2. 结构图
3. 简述
工厂方法是负责“生产”一个对象的函数。客户只需要调用Creator的工厂方法FactoryMethod()就可以得到一个ConcreteProduct的实例指针,而无需知道ConcreteProduct类的定义。
Creator可以是个抽象类,具体的FactoryMethod()是在内部的ConcreteCreator中实现;也可以是个具体类,FactoryMethod()提供一个默认的实现,这种情况一般不用。
工厂方法FactoryMethod也可以有参数,比如一个enum参数,使得客户可以通过不同的enum参数来控制生成不同的具体产品类。
4. 实例代码
4.1 对外的接口的定义,给客户Client使用
// 抽象产品类 class AbstractProduct { public: virtual ~AbstractProduct() {} }; // 创建者类,定义一个工厂方法,可以是个纯虚函数,也可以有个默认的实现 class Creator { public: Creator() {} virtual ~Creator() {} virtual AbstractProduct* FactoryMethod() { return NULL; } };
4.2 内部的实现类,外部无法看到
// 具体产品类 class ConcreteProduct : public AbstractProduct { public: ConcreteProduct() {} ~ConcreteProduct() {} }; // 具体创建者类,重载工厂方法,生产一个具体的产品类实例 class ConcreateCreator : public Creator { public: ConcreateCreator() {} ~ConcreateCreator() {} AbstractProduct* FactoryMethod() { return new ConcreteProduct(); } };
4.3 客户程序
int main () { Creator* pCreator = new ConcreateCreator; AbstractProduct* pProduct = pCreator->FactoryMethod(); }
相关文章推荐
- 设计模式--创建型-Singleton(单例单件)
- c++虚函数
- linux 自动关机
- oracle中用户锁定及解锁
- js 对文件操作
- full permutation
- jquery ajax api
- 简单的JAVA IO
- 【交互】dll中加入资源及提取资源
- Linux-Gcc生成和使用静态库和动态库详解
- [jobdu]丑数
- Thrift
- C程序的内存分配
- SQL_TRACE及 Tkprof用法以及问题分析
- oracle笔记系列(一)
- 才高行厚的hibernate(4)---hibernate的HQL语言
- IOS越狱开发(三)------DEB生成和apt建立
- IOS越狱开发(三)------DEB生成和apt建立
- Sql Server Job 简单使用
- Linux bridge 网桥模块内部数据包转发流程