设计模式--工厂模式

工厂模式

头文件


Calculator.h

#ifndef _CALCULATOR_H_
#define _CALCULATOR_H_

#include <iostream>
#include <string>

using namespace std;

/* 计算的工厂类 */
// 简单工厂模式
class Calculator;
class CalcSimplyFactory
{
public:
	Calculator *createCalc(string str);
};

// 工厂模式
class CalcFactory
{
public:
	double GetResult(string str, double a, double b);
};

class ClacPlusFactory : CalcFactory
{

};

class ClacSubFactory : CalcFactory
{

};

/* 计算类 */
// 基类
class Calculator
{
public:
	Calculator();
	virtual double createOperate(double a, double b) = 0;
};

class CalcPlus : public Calculator
{
public:
	CalcPlus();
	double createOperate(double a, double b);

};

class CalcSub : public Calculator
{
public:
	CalcSub();
	double createOperate(double a, double b);
};

// 使用类
class Calc
{
private:
	double NumberA;
	double NumberB;
public:
	Calc();
	Calc(double a, double b);
	void SetNumberA(double num);
	void SetNumberB(double num);
	double GetResult(string str);
};


#endif

实现

calculator.cpp



#include <iostream>
#include <string>
#include "Calculator.h"

using namespace std;

Calculator *CalcSimplyFactory::createCalc(string str)
{
	if (str == "-") {
		return new CalcSub();
	}
	else if (str == "+") {
		return new CalcPlus();
	}
}


double CalcFactory::GetResult(string str, double a, double b)
{
	CalcSimplyFactory cSF;
	Calculator *calculator = cSF.createCalc(str);
	return calculator->createOperate(a, b);
}

CalcPlus::CalcPlus()
{
	cout << endl << "this is CalcPlus" << endl;
}
double CalcPlus::createOperate(double a , double b) 
{
	return a + b;
}

CalcSub::CalcSub()
{
	cout << endl << "this is CalcSub" << endl;
}
double CalcSub::createOperate(double a, double b)
{
	return a - b;
}


/* Calc */
Calculator::Calculator()
{
}

Calc::Calc()
{
}
Calc::Calc(double a, double b)
{
	this->NumberA = a;
	this->NumberB = b;
}
double Calc::GetResult(string str)
{
	// 使用简单工厂模式
	CalcSimplyFactory cSF;
	Calculator *calc = cSF.createCalc(str);
	double ans1 =  calc->createOperate(NumberA, NumberB);

	delete calc;
	// 使用工厂模式
	double ans2 = 0;


	return ans1 + ans2;
}

void Calc::SetNumberA(double num)
{
	this->NumberA = num;
}

void Calc::SetNumberB(double num)
{
	this->NumberB = num;
}

main


factory.cpp

#include <iostream>
#include <fstream>
#include <string>
#include "Calculator.h"

using namespace std;

void input(double &a, double &b, string &strCalc)
{
	cout.setf(ios::right);
	ifstream fin;
	char str[80];

	fin.open("readme.txt", ios::in);
	fin.getline(str, 80);
	cout << str;

	fin >> a >> b;
	cout << endl << "a= " << a << endl << "b= " << b << endl;

	fin.getline(str, 80);
	cout << str << endl;

	fin.getline(str, 80);
	cout << str << endl;

	strCalc.assign(str);
}

int main()
{
	double a, b;
	string strCalc;

	input(a, b, strCalc);
	cout << "================================================";
	Calc calc(a, b);
	cout << a << strCalc << b << "=" << calc.GetResult(strCalc) << endl;


	system("pause");
	return 0;
}


readme.txt

THIS IS REAMME.
80  50.6
+

result

结果

未完。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值