【5】工厂模式

设计场景:

工厂模式实现计算机基础加减乘除运算


原因分析:

简单工厂模式与工厂模式的区别
写了一半还没写完,先睡了


代码如下:

#include"factory.h"
#include"add_factory.h"
#include"sub_factory.h"
#include"mul_factory.h"
#include"div_factory.h"
#include"add_operation.h"
#include"sub_operation.h"
#include"mul_operation.h"
#include"div_operation.h"


// 工厂模式
int main()
{
	while (true)
	{
		double numA = 0.00;
		double numB = 0.00;
		char operate;

		cout << "输入第一个数据:";
		cin >> numA;

		cout << "输入第二个数据:";
		cin >> numB;

		cout << "输入操作符:";
		cin >> operate;

		FACTORY* operFactory = nullptr;
		OPERATION* oper = nullptr;

		switch (operate)
		{
		case '+':
			operFactory = new ADD_FACTORY();
			oper = operFactory->createOperation();
			oper->setNumberA(numA);
			oper->setNumberB(numB);
			cout << "结果:" << oper->getResult() << endl;
			break;
		case '-':
			operFactory = new SUB_FACTORY();
			oper = operFactory->createOperation();
			oper->setNumberA(numA);
			oper->setNumberB(numB);
			cout << "结果:" << oper->getResult() << endl;
			break;
		case '*':
			operFactory = new MUL_FACTORY();
			oper = operFactory->createOperation();
			oper->setNumberA(numA);
			oper->setNumberB(numB);
			cout << "结果:" << oper->getResult() << endl;
			break;
		case '/':
			operFactory = new DIV_FACTORY();
			oper = operFactory->createOperation();
			oper->setNumberA(numA);
			oper->setNumberB(numB);
			cout << "结果:" << oper->getResult() << endl;
			break;
		default:
			break;
		}
	}
	system("pause");
	return 0;
}
#pragma once

#include<iostream>
#include<string>
using namespace std;

// 操作类-----基类
class OPERATION
{
public:
	// get
	double getNumberA() { return m_NumberA; }
	double getNumberB() { return m_NumberB; }
	// set
	void setNumberA(double numberA) { m_NumberA = numberA; }
	void setNumberB(double numberB) { m_NumberB = numberB; }

	// 虚函数
	virtual double getResult() { double result = 0; return result; }; // 获取结果值

private:
	double m_NumberA;
	double m_NumberB;
};
#pragma once
#include"operation.h"

// 加法-----派生类
class ADD_OPERATION : public OPERATION
{
public:
	double getResult() override
	{
		return (getNumberA() + getNumberB());
	}
};


#pragma once
#include"operation.h"

// 减法-----派生类
class SUB_OPERATION : public OPERATION
{
public:
	double getResult() override
	{
		return (getNumberA() - getNumberB());
	}
};


#pragma once
#include"operation.h"

// 承法-----派生类
class MUL_OPERATION : public OPERATION
{
public:
	double getResult() override
	{
		return (getNumberA() * getNumberB());
	}
};

#pragma once
#include"operation.h"

// 除法-----派生类
class DIV_OPERATION : public OPERATION
{
public:
	double getResult() override
	{
		if (getNumberB() != 0)
		{
			return (getNumberA() / getNumberB());
		}
		cout << "零不能做除数" << endl;
		abort();
	}
};
#pragma once
#include "operation.h"

// 工厂-----接口-----特殊的抽象类
class FACTORY
{
public:
	// 纯虚函数
	virtual OPERATION* createOperation() = 0;
};

#pragma once
#include"factory.h"
#include"operation.h"
#include"add_operation.h"

// 加法工厂类
class ADD_FACTORY : public FACTORY
{
public:
	// 返回加法操作对象
	OPERATION* createOperation() override
	{
		return new ADD_OPERATION();
	}
};


#pragma once
#include"factory.h"
#include"operation.h"
#include"sub_operation.h"

// 减法工厂类
class SUB_FACTORY : public FACTORY
{
public:
	// 返回加法操作对象
	OPERATION* createOperation() override
	{
		return new SUB_OPERATION();
	}
};


#pragma once
#include"factory.h"
#include"operation.h"
#include"mul_operation.h"

// 承法工厂类
class MUL_FACTORY : public FACTORY
{
public:
	// 返回加法操作对象
	OPERATION* createOperation() override
	{
		return new MUL_OPERATION();
	}
};


#pragma once
#include"factory.h"
#include"operation.h"
#include"div_operation.h"

// 除法工厂类
class DIV_FACTORY : public FACTORY
{
public:
	// 返回加法操作对象
	OPERATION* createOperation() override
	{
		return new DIV_OPERATION();
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值