设计模式案例(C++版)-- 简单工厂模式

简单工厂模式即使用一个工厂类,利用所给条件来决定需要创建的类对象。

一.需求分析
设计一个运算器,能够实现简单的运算,如加减乘除等;
尽量保证类和类之间松耦合,方便后期增加或修改运算方式。

二.模块设计
在这里插入图片描述
三.代码实现
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;
}
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库巴巴星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值