设计模式---简单工厂模式

98 阅读2分钟

简单工厂模式的定义

简单工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。工厂模式使一个类的实例化延迟到其子类。在简单工厂模式中,工厂类负责创建所有的对象,通常通过一个静态方法,根据传入的参数决定创建哪一个类的实例。

简单工厂模式的特点

  • 封装对象的创建:简单工厂模式将对象的创建封装在工厂类中,客户端通过工厂类来获取对象实例。

  • 扩展性好:添加新的操作时,只需要添加新的具体操作类和修改工厂方法,无需修改现有的客户端代码。

代码示例

#include <iostream>

class Operation
{
public:
	virtual double getResult(double numberA, double numberB) = 0;	// 纯虚函数
	virtual ~Operation() {}		// 虚析构函数,通过基类指针或引用删除派生类对象时,可以确保资源的正确释放,避免内存泄漏或未定义行为
};

class Add :public Operation
{
public:
	double getResult(double numberA, double numberB) override
	{
		return numberA + numberB;
	}
};

class Sub :public Operation
{
public:
	double getResult(double numberA, double numberB) override
	{
		return numberA - numberB;
	}
};

class Mul :public Operation
{
public:
	double getResult(double numberA, double numberB) override
	{
		return numberA * numberB;
	}
};

class Div :public Operation
{
public:
	double getResult(double numberA, double numberB) override
	{
		if (numberB == 0)
		{
			std::cout << "除数不能为0" << std::endl;
			exit(0);
		}
		return numberA / numberB;
	}
};


class OperationFactory
{
public:
	static Operation* createOperate(char operate)
	{
		switch (operate)
		{
		case '+':
			return new Add();
		case '-':
			return new Sub();
		case '*':
			return new Mul();
		case '/':
			return new Div();
		}
	}
};


int main()
{
	char oper;
	double numA, numB;
	std::cout << "请输入操作符 (+, -, *, /): ";
	std::cin >> oper;
	std::cout << "请输入两个操作数: ";
	std::cin >> numA >> numB;

	Operation* operation = OperationFactory::createOperate(oper);

	std::cout << "结果是: " << operation->getResult(numA, numB) << std::endl;
	delete operation;

	system("pause");
	return 0;
}

总结

通过使用简单工厂模式,可以将对象的创建逻辑集中在一个地方,从而使代码更具可读性和可维护性。当需要添加新的操作时,只需要添加新的操作类并修改工厂类即可,而不需要修改使用这些操作的客户端代码。