一、简单工厂模式

由于手中没有面向对象的项目,于是决定把大话设计模式用c++写一遍加深映像!


面向对象的好处:可维护,可扩展,可复用,灵活性好。

原则常记心中:职责单一、开放-封闭、依赖倒转、迪米特--->(低耦合)


职责单一:多个职责耦合在一起时一个职责变化可能会影响整体,为了维护更加灵活,尽量让功能原子化。对一个类而言,应该仅有一个引起它变化的原因。

开放-封闭:类应该可以扩展(开放),但是不可修改(封闭)。

依赖倒转:针对接口编程,不要对实现编程。把父类都替换成它的子类,程序的行为没有变化。

迪米特:如果两个类不必彼此直接通讯,那么这两个类就不应当直接的相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。


简单工厂模式

下面我们将实现一个计算器。

我们可以自由的增加其他的运算如乘法、除法,而不修改运算类,只需要增加2个子类-----扩展-封闭

但我们还是需要修改OperationFactory中的else if分支。OperationFactory为我们提供了调用运算的接口。

通过将父类的指针绑定到子类,在调用虚函数的时候会根据子类的类型动态的调用函数


定义一个运算类
class Operation{//运算类
protected:
	double numberA = 0;
	double numberB = 0;
	
public:
		void set_number(double a,double b){
			numberA=a;
			numberB=b;
		}
		virtual double GetResult()
		{
			double result =0;
			return result;
		}
};

具体运算类
class operationAdd:public Operation{//加法
public:
	double GetResult()
	{
		return numberA+numberB;
	}
};

class operationSub:public Operation{//减法
public:
	double GetResult()
	{
		return numberA-numberB;
	}
};

简单工厂类 :传入参数决定实例化那个类

class OperationFactory{//简单工厂
public:
	Operation *createOperation(string operation)//选择具体实例化那个类
	{
		Operation *oper=NULL;
		
		if(operation== "+")
					oper = new operationAdd();
		else if(operation=="-")
					oper = new operationSub();
					
		return oper;
	}
};

客服端
int main()
{
	Operation *oper;
	OperationFactory one;
	oper=one.createOperation("-");
	oper->set_number(5,9);
	cout<<oper->GetResult();
	
	return 0;
}

我们的简单工厂每次增加运算都要修改、由此就引入了我们下一个模式---->工厂方法模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值