个人认为简单工厂模式是最简单的一种设计模式,同时也是应用最广泛的一种设计模式。设计思路是用户根据条件筛选生成哪种产品,然后将条件传递给factory,由Factory生成具体产品(本文为具体运算)。
UML如图
代码实现:
运算类
//运算
//Operation.h
#pragma once
#include <string>
class operation
{
public:
operation():
m_number1(0),
m_number2(0)
{}
void setNum1(double num)
{
this->m_number1 = num;
}
void setNum2(double num)
{
this->m_number2;
}
double getNum1()
{
return m_number1;
}
double getNum2()
{
return m_number2;
}
virtual double getResult()=0;
private:
double m_number1;
double m_number2;
};
class addOperation:public operation
{
public:
double getResult()
{
return getNum1()+getNum2();
}
};
class sumOperation:public operation
{
public:
double getResult()
{
return getNum1() - getNum2();
}
};
class mulOperation:public operation
{
public:
double getResult()
{
return getNum1()*getNum2();
}
};
class divOperation:public operation
{
public:
double getResult()
{
return getNum1()/getNum2();
}
};
工厂类如下
//工厂类
//Factory
#pragma once
#include "Operation.h"
#include <string>
class OperationFactory
{
public:
static operation* CreateOperation(char opt)
{
operation *p;
switch(opt)
{
case '+':
p = new addOperation();
break;
case '-':
p = new sumOperation();
break;
default:
break;
}
return p;
}
};
在主函数中使用
//main.cpp
#include "OperationFactory.h"
int main(int argc, char *argv[])
{
double num1,num2;
operation *pOpt = OperationFactory::CreateOperation('+');
pOpt->setNum1(num1);
pOpt->setNum2(num2);
return pOpt->getResult();
}