设计模式学习系列4 简单工厂模式
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
1简单工厂模式结构图
简单工厂模式主要包含三部分
(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)上面方法中 创建类的释放是个问题,因为工厂类没有做到自动释放,需要在代码中主动释放,不是很好,不知道由什么好的方法
细雨淅淅 标签: 设计模式