C++面向对象设计模式-简单工厂模式

尤为印象深刻的是,去年校招的时候有个几百人的公司技术负责人跟我说,不要以为学了几个设计模式就可以说是学到了,真正项目需要的都是十万行以上的,几个模式套着用,为的就是降低耦合度,和最大程度提高复用性,尽量分离客户端界面和逻辑。
今天刚好重新学习了简单工厂模式和策略,并且把两个模式相结合手敲了一边,看C#来写C++真有点不习惯!
我个人的理解,所谓工厂模式:就是需要什么,就new什么类出来,每个类的工作尽量单一。比如简单的面试题:用面向对象语言,手写实现加减乘除。
我需要4个类,加法类,减法类,乘法类,除法类,和一个抽象的运算类,最好用纯虚函数或者虚函数来实现多态!
我只要求,在客户端,输入两个数字,然后输入客户需要的运算方法,(尤其是注意除数不能为0!(lll¬ω¬))

class Operation//运算类所有的运算都将是我的儿子
{
public:
	virtual double GetResult(double a, double b)//父类虚函数,用于获取计算结果
	{
		double result = 0;
		return result;
	}
};
class Add : public Operation//加法类继承父类,重写虚函数
{
public:
	//功能实现
	virtual double GetResult(double a, double b)
	{
		
		return a + b;
	}
};
class Sub : public Operation//减法类
{
public:
	virtual double GetResult(double a, double b)
	{
	//重写虚函数实现多态
		return a - b;
	}
};
class Mul : public Operation
{
public:
	virtual double GetResult(double a, double b)
	{
		//乘法类的多态实现
		return a * b;
	}
};
class Div : public Operation
{
public:
	virtual double GetResult(double a, double b)
	{
	//判断一下,如果除数为0,加1再除
		if (b == 0)
		{
			return a / (b + 1);
		}
		else
			return a / b;
	}
};

好的,上面已经把逻辑业务方面给确定出来了,下面就是建立一个简单的工厂了,把需要运算的类给生产出来。

class OperationFactory//工厂类
{
public:
	
	Operation* func(char ch)//构造函数返回运算类指针
	{
		//先初始化一下,不然vs2017无法通过编译
		Operation* poer = NULL;
		switch (ch)//根据传入函数实参的‘运算符’
		{
		case '+':
			//只有父类指针指向子类对象,才能实现多态调用子类的虚函数
			poer = new Add();
			//需要做什么运算,就生成什么运算的类
			break;
		case '-':
			poer = new Sub();
			break;
		case '*':
			poer = new Mul();
			break;
		case '/':
			poer = new Div();
			break;
		}
		return poer;//最后,把poer指向的子类对象返回出去
	}
};

下面是客户端代码。

int main()
{
	OperationFactory *o = NULL;
	Operation *p = NULL;
	char ch;
	cout << "先输入运算符,再输入你要运算的两个数" << endl;
	cin >> ch;
	double x, y;
	cin >> x >> y;
	p =( o->func(ch));
	double a = p->GetResult(x, y);
	cout << a << endl;
	
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值