#include <iostream>
using namespace std;
class Operation
{
public:
virtual double GetResult() = 0;
void setA(double A)
{
m_numberA = A;
}
void setB(double B)
{
m_numberB = B;
}
protected:
double m_numberA;
double m_numberB;
};
class Add: public Operation
{
double GetResult()
{
return (m_numberA + m_numberB);
}
};
class Sub: public Operation
{
double GetResult()
{
return (m_numberA - m_numberB);
}
};
class Mul: public Operation
{
double GetResult()
{
return (m_numberA * m_numberB);
}
};
class Div: public Operation
{
double GetResult()
{
if (m_numberB == 0)
{
cout << "m_numberB is 0" << endl;
return -1;
}
return (m_numberA / m_numberB);
}
};
class IFactory
{
public:
virtual Operation* CreateOperation() = 0;
};
class AddFactory: public IFactory
{
public:
Operation* CreateOperation()
{
return new Add;
}
};
class SubFactory: public IFactory
{
public:
Operation* CreateOperation()
{
return new Sub;
}
};
class MulFactory: public IFactory
{
public:
Operation* CreateOperation()
{
return new Mul;
}
};
class DivFactory: public IFactory
{
public:
Operation* CreateOperation()
{
return new Div;
}
};
int main()
{
IFactory* pFactory = new AddFactory;
Operation* pOper = pFactory->CreateOperation();
pOper->setA(11);
pOper->setB(22);
cout << pOper->GetResult() << endl;
delete pFactory;
delete pOper;
return 0;
}
工厂方法模式
最新推荐文章于 2025-12-16 20:04:55 发布
本文介绍了一个使用工厂模式实现的简单计算器程序。通过定义抽象基类Operation及其实现加、减、乘、除操作的派生类,并利用IFactory接口创建不同类型的Operation对象,实现了灵活的算术运算功能。
9591

被折叠的 条评论
为什么被折叠?



