#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;
}
工厂方法模式
最新推荐文章于 2024-05-06 09:42:21 发布