简单工厂模式的定义
简单工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。工厂模式使一个类的实例化延迟到其子类。在简单工厂模式中,工厂类负责创建所有的对象,通常通过一个静态方法,根据传入的参数决定创建哪一个类的实例。
简单工厂模式的特点
-
封装对象的创建:简单工厂模式将对象的创建封装在工厂类中,客户端通过工厂类来获取对象实例。
-
扩展性好:添加新的操作时,只需要添加新的具体操作类和修改工厂方法,无需修改现有的客户端代码。
代码示例
#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;
}
总结
通过使用简单工厂模式,可以将对象的创建逻辑集中在一个地方,从而使代码更具可读性和可维护性。当需要添加新的操作时,只需要添加新的操作类并修改工厂类即可,而不需要修改使用这些操作的客户端代码。