简单工厂模式即使用一个工厂类,利用所给条件来决定需要创建的类对象。
一.需求分析
设计一个运算器,能够实现简单的运算,如加减乘除等;
尽量保证类和类之间松耦合,方便后期增加或修改运算方式。
二.模块设计
三.代码实现
1.运算类
#ifndef OPERATION_H
#define OPERATION_H
/*
* 运算类
* 所有运算的父类
*/
class Operation
{
public:
//运算方式
enum Type
{
ADD = 1, //加
SUB, //减
MUL, //乘
DIV //除
};
//运算
virtual double getResult(double num1,double num2);
};
#endif // !OPERATION_H
#include "Operation.h"
double Operation::getResult(double num1, double num2)
{
return 0.0;
}
2.加法类
#ifndef ADD_H
#define ADD_H
/*
* 加法类
*/
#include"Operation.h"
class Add : public Operation
{
public:
//加法运算
double getResult(double num1, double num2) override;
};
#endif // !ADD_H
#include "Add.h"
double Add::getResult(double num1, double num2)
{
return num1 + num2;
}
3.减法类
#ifndef SUB_H
#define SUB_H
/*
* 减法类
*/
#include"Operation.h"
class Sub : public Operation
{
public:
//减法
double getResult(double num1, double num2)override;
};
#endif // !SUB_H
#include "Sub.h"
double Sub::getResult(double num1, double num2)
{
return num1 - num2;
}
4.乘法类
#ifndef MUL_H
#define MUL_H
/*
* 乘法类
*/
#include"Operation.h"
class Mul : public Operation
{
public:
//乘法
double getResult(double num1, double num2)override;
};
#endif // !MUL_H
#include "Mul.h"
double Mul::getResult(double num1, double num2)
{
return num1 * num2;
}
5.除法类
#ifndef DIV_H
#define DIV_H
/*
* 除法类
*/
#include"Operation.h"
class Div : public Operation
{
public:
double getResult(double num1, double num2)override;
};
#endif // !DIV_H
#include "Div.h"
#include<iostream>
using namespace std;
double Div::getResult(double num1, double num2)
{
if (num2 == 0) {
cout << "除数不能为0!" << endl;
return -1;
}
return num1 / num2;
}
6.简单工厂类
#ifndef FACTORY_H
#define FACTORY_H
/*
* 简单工厂类
* 根据运算符创建对应对象
*/
#include"Operation.h"
#include"Add.h"
#include"Sub.h"
#include"Mul.h"
#include"Div.h"
class Factory
{
public:
//创建运算方式对象
Operation* createOperate(Operation::Type oper);
};
#endif // !FACTORY_H
#include "Factory.h"
Operation* Factory::createOperate(Operation::Type oper)
{
Operation* op = nullptr;
switch (oper)
{
case Operation::ADD:
op = new Add();
break;
case Operation::SUB:
op = new Sub();
break;
case Operation::MUL:
op = new Mul();
break;
case Operation::DIV:
op = new Div();
break;
default:
break;
}
return op;
}
7.主函数
#include<iostream>
#include"Factory.h"
#include"Operation.h"
using namespace std;
int main()
{
cout << "请输入两个操作数:" << endl;
double num1, num2;
cin >> num1 >> num2;
cout << "请选择操作符:" << endl;
cout << "1. + " << endl;
cout << "2. - " << endl;
cout << "3. * " << endl;
cout << "4. / " << endl;
int select = 0;
cin >> select;
Factory* fac = new Factory();
double result = fac->createOperate((Operation::Type)select)->getResult(num1,num2);
cout << result;
return 0;
}