设计模式学习系列4 简单工厂模式
2013-11-05 23:52
621 查看
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
1简单工厂模式结构图
![](http://images.cnitblog.com/blog/413927/201311/05235232-e61a26dfdb624ad485753417c7f55466.png)
简单工厂模式主要包含三部分
(1)工厂:负责根据客户需求创造需要的产品
(2)抽象产品:工厂生产产品的父类
(3)具体产品
2代码分析
注意的问题:
(1)//c++ Switch判断语句中只允许整形和枚举类型,即integer type:char,short,int,long, //不建议使用float类型以及string类型
(2)上面方法中 创建类的释放是个问题,因为工厂类没有做到自动释放,需要在代码中主动释放,不是很好,不知道由什么好的方法
细雨淅淅 标签: 设计模式
1简单工厂模式结构图
![](http://images.cnitblog.com/blog/413927/201311/05235232-e61a26dfdb624ad485753417c7f55466.png)
简单工厂模式主要包含三部分
(1)工厂:负责根据客户需求创造需要的产品
(2)抽象产品:工厂生产产品的父类
(3)具体产品
2代码分析
/*设计模式学习系列之简单工厂模式 * 参考书籍《大话设计模式》 * 简单工厂模式 的主要用途:根据需求创造需要的实例 * * 例子逻辑:两个数的各种运算 */ #include <iostream> using namespace std; enum OperatorType { ADD = 1, SUB, MUL, DIV, }; //运算类基类 class Operation { public: double numA ; double numB ; public: Operation():numA(0),numB(0){} Operation(const double& a , const double& b) { numA = a ; numB = b ; } virtual ~Operation(){} void SetNumA(const double& a) { numA = a ; } void SetNumB(const double& b) { numB = b ; } virtual double GetResult() { return 0.0f ; } }; //加法类 class OperationAdd: public Operation { double GetResult() { return numA + numB ; } }; //减法类 class OperationSub: public Operation { double GetResult() { return numA - numB ; } }; //乘法 class OperationMul: public Operation { double GetResult() { return numA * numB ; } }; //除法 class OperationDiv: public Operation { double GetResult() { if(numB == 0) { cout << "除数不能为0 \n" << endl ; return 0 ; } return numA / numB ; } }; //工厂类 class Factory { public: static Operation* CreateOperation(const int& type) { Operation * pOperation = 0 ; //c++ Switch判断语句中只允许整形和枚举类型,即integer type:char,short,int,long, //不建议使用float类型以及string类型 switch(type) { case ADD: { pOperation = new OperationAdd ; } break ; case SUB: { pOperation = new OperationSub ; } break ; case MUL: { pOperation = new OperationMul ; } break ; case DIV: { pOperation = new OperationDiv ; } break ; default: break; } return pOperation ; } }; //=============================== #include "factory_sm.h" int main() { Operation *pOpe = NULL ; pOpe = Factory::CreateOperation(ADD); pOpe->SetNumA(10); pOpe->SetNumB(10); cout << pOpe->GetResult() << endl ; delete pOpe ; //工厂中创建了,但没释放,这是个问题 }
注意的问题:
(1)//c++ Switch判断语句中只允许整形和枚举类型,即integer type:char,short,int,long, //不建议使用float类型以及string类型
(2)上面方法中 创建类的释放是个问题,因为工厂类没有做到自动释放,需要在代码中主动释放,不是很好,不知道由什么好的方法
细雨淅淅 标签: 设计模式
相关文章推荐
- IIS 设置
- Java File和byte数据之间的转换
- Linux 命令学习心得
- 关于js的面向对象设计
- html页面的onunload、onbeforeunload
- mount iso
- MySQL数据库中order by的实现 和 by rand() 和优化
- 人生精义
- 今天开始使用csdn的博客了
- Opencv及Kinect/OpenNI常用学习网址
- ARM架构函数调用时候变量存储规则
- 以后有时间的话,应该做些什么呢?
- 数据相似性检测算法
- IT职业规划(程序员,应届生一定要看)
- 未来的十大行业
- iOS硬件编解码库VideoToolBox的调用
- 最火android开源项目
- Windows系统调用架构分析
- 锋利的JQuery----jQuery对象和DOM对象及二者相互转换
- javascript Xml兼容性随笔