最近读程杰的<大话设计模式>, 但是代码是c#版的, 于是参考书中和网上的若干代码. 编写设计模式中简单工厂模式C++实现
简单工厂模式理论总结如下:
1. 实质 -- 主要用于创建对象.
将一个具体类的实例化交给一个静态工厂方法来执行。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
2. 优缺点
优点:
1) 职责单一,实现简单,且实现了客户端代码与具体实现的解耦.
是减少代码耦合的一种设计方式,更易于维护.
2) 新添加类时,不会影响以前的系统代码.
缺点:
客户端必须要知道基类和工厂类,耦合性差.
3. 应用场合
核心提示: 主要用于创建对象.适用于不同情况创建不同的类时.
应用场合:
1) 工厂类负责创建的对象比较少;
2) 客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
3) 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
4. 模式中的角色
1) 工厂类(Simple Factory): 只包含了创建具体类的静态方法。
2) 抽象产品(Product):定义简单工厂中要返回的产品。
3) 具体产品(ConcreteProduct):具体产品。
5 代码部分
.h部分
// 抽象产品
class Operation
{
public:
virtual double GetResult() = 0;
public:
double m_FirstNum;
double m_SecondNum;
//double m_Result;
};
// 具体产品 -- 加法
class AddOperation : public Operation
{
double GetResult()
{
return (m_FirstNum + m_SecondNum);
}
};
// 具体产品 -- 减法
class SubOperation : public Operation
{
double GetResult()
{
return (m_FirstNum - m_SecondNum);
}
};
// 简单工厂
class CCaculOperation
{
public:
static Operation* CreateProduct(char cOper);
};
Operation* CCaculOperation::CreateProduct(char cOper)
{
Operation *oper;
switch (cOper)
{
case '+':
oper = new AddOperation();
break;
case '-':
oper = new SubOperation();
break;
default:
oper = new AddOperation();
break;
}
return oper;
}
.cpp部分
#include "SimpleFactory.h"
#include <iostream>
using namespace std;
int main()
{
int num1;
int num2;
char cOper;
cin>>num1;
cin>>num2;
cin>>cOper;
Operation *oper = CCaculOperation::CreateProduct(cOper);
oper->m_FirstNum = num1;
oper->m_SecondNum = num2;
cout<<oper->GetResult()<<endl;
return 0;
}