24种设计模式学习记录第三篇
24种设计模式学习记录第三篇
没有脚的大笨鸟 发表于4年前
24种设计模式学习记录第三篇
  • 发表于 4年前
  • 阅读 341
  • 收藏 8
  • 点赞 0
  • 评论 0
摘要: 计算器最终版,不过这样的小程序僵硬的套用oo三大特性感觉很那个,反正当学习面向对象设计了。

上次的代码封装的还不是很好,如果增加开方算法时,其它的算法也能被看到,如果以前的代码被误改了呢,这样不好~

这次主要对上次的代码进行改进。

                现在请出主角24种模式中的第一种模式-----------“简单工厂模式“                  

我们会想到把每种运算封装成一个单独的类,这样就可以降低耦合程度,修改一个不会看到另一个。但是问题来了,到底实例化哪个类? 将来会增加哪些类?这些都很容易发生变化,所以应该考虑一个单独的类来做这个创造实例的过程,从来以不变应万变,这就是所谓的工厂。

------------------------------------------------------------------------------------------------------------------

    MD,我怒了,买了本设计模式是用c#写的,本来c++就不好,还要做这种转换,有不对的地方欢迎指正~~~

-----------------------------------------------------------------------------------------------------------------

#include<iostream>

using namespace std;

class Operator
{
public:
	Operator(double num1,double num2):m_num1(num1),m_num2(num2){}
	virtual double GetValue(void)
	{
		double value = 0;
		return value;
	}
	double GetNum1(void)
	{
		return m_num1;
	}
	double GetNum2(void)
	{
		return m_num2;
	}
private:
	double m_num1,m_num2;
};

class OperatorAdd:public Operator
{
public:
	OperatorAdd(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() + GetNum2();
	}

};

class OperatorSub:public Operator
{
public:
	OperatorSub(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() - GetNum2();
	}
};

class OperatorMul:public Operator
{
public:
	OperatorMul(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() * GetNum2();
	}
};

class OperatorDiv:public Operator
{
public:
	OperatorDiv(double num1,double num2):Operator(num1,num2){}
	double GetValue(void)
	{
		return GetNum1() / GetNum2();
	}
};

class OperationFactory
{
public:
	Operator* CreateOperator(double num1,double num2, char op)
	{
		Operator *oper = NULL ;
		switch(op)
		{
		case '+':
			oper = new OperatorAdd(num1,num2);
			break;
		case '-':
			oper = new OperatorSub(num1,num2);
			break;
		case '*':
			oper = new OperatorMul(num1,num2);
			break;
		case '/':
			oper = new OperatorDiv(num1,num2);
			break;
		}
		return oper;
	}
	
};


int main(void)
{
	int num1,num2;
	char op;
	Operator *cal = NULL;
	OperationFactory factory;
	cout << "please input num1" << endl;
	cin  >> num1;
	cout << "please input num2" << endl;
	cin  >> num2;
	cout << "please input the operator" << endl;
	cin >> op;
	cout << num1 << " " << op << " "  << num2 << " " << "=" << " ";
	
	cal = factory.CreateOperator(num1,num2,op);
	cout << cal->GetValue() << endl;	
	return 0;

}




共有 人打赏支持
粉丝 6
博文 11
码字总数 5230
×
没有脚的大笨鸟
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: