简单工厂模式

一,简单工厂模式

1.1,对简单工厂模式的理解

简单工厂模式: 定义一个创建对象的接口,让子类决定实例化哪一个类。

1.2,解决的问题

主要去解决如何去实例化对象的问题,即判断要创建哪一个类对象(例如:加法类、减法类),以及对应的类会不会增加(例如:以后可能增加乘法类、除法类)

1.3,应用场景

使用面向对象的原则写一个计算器程序,下面是程序的结构框图与源代码

// 运算符类基类
class Operation
{
public:
	Operation(double a, double b):numberA(a), numberB(b){}
	double getResult();
protected:
	double numberA;
	double numberB;
};

// 加法运算
class AddOperation : public Operation
{
public:
	double getResult()
	{
		return numberA + numberB;
	}
};

// 减法运算
class SubOperation : public Operation
{
public:
	double getResult()
	{
		return numberA - numberB;
	}
};

// 简单运算符工厂类
class OperationFactory
{
public:
	static Operation *createOperation(String operation)
	{
		Operation *oper = NULL;
		switch(operation)
		{
		case "+":
			oper = new AddOperation();
			break;
		case "-":
			oper = new SupOperation();
			break;
		}

		return oper;
	}
};

// 客户端代码
void main()
{
	Operation *oper = OperationFactory.createOperation("+");
	oper->numberA = 1;
	oper->numberB = 2;
	double result = oper.getResult();
}

程序分析:

运算符类是会发生变化的,根据需求可能会添加新的运算符操作,例如:开根号、取模运算。这些都是属于会变化的部分,面向对象的精髓在于封装,封装就是要封装可能会变化的部分,然后对外提供一个稳定的接口。使用工厂类创建具体的运算符对象,对外提供一个稳定的接口createOperation,客户端代码与这个接口耦合在一起。即使以后添加新的运算符操作,只用在工厂类中进行修改,客户端代码丝毫不受影响。

在这里插入图片描述

1.4,简单工厂模式的优点与缺点

优点:

  1. 简单工厂模式实现创建类对象的代码与客户端代码的分离,客户端通过工厂获取要创建的对象,不用关心对象是如何创建的。如果要创建的类对象发生了变化,只需要在工厂类中进行修改。

缺点:

  1. 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中。它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值