把实例化对象的过程放在工厂类中
code
#include <string>
#include <memory>
class Opearation
{
public:
virtual double getResult(double numA, double numB) = 0;
virtual ~Opearation() = default;
private:
};
class Add : public Opearation
{
public:
double getResult(double numA, double numB) override
{
return numA + numB;
}
private:
};
class Sub : public Opearation
{
public:
double getResult(double numA, double numB) override
{
return numA - numB;
}
private:
};
class Mul : public Opearation
{
public:
double getResult(double numA, double numB) override
{
return numA * numB;
}
private:
};
class Div : public Opearation
{
public:
double getResult(double numA, double numB) override
{
return numA / numB;
}
private:
};
enum class OperationType
{
Add,
Sub,
Mul,
Div,
Invalid
};
class OperationSimpleFactory
{
public:
static std::shared_ptr<Opearation> createOperate(const OperationType& operate)
{
switch (operate)
{
case OperationType::Add:
{
return std::make_shared<Add>();
}
case OperationType::Sub:
{
return std::make_shared<Sub>();
}
case OperationType::Mul:
{
return std::make_shared<Mul>();
}
case OperationType::Div:
{
return std::make_shared<Div>();
}
}
}
};
#include <iostream>
#include "SimpleFactory.h"
using namespace std;
double cal(std::shared_ptr<Opearation> baseOpearate)
{
return baseOpearate->getResult(10, 2);
}
int main()
{
cout << cal(OperationSimpleFactory::createOperate(OperationType::Add)) << endl;
cout << cal(OperationSimpleFactory::createOperate(OperationType::Sub)) << endl;
cout << cal(OperationSimpleFactory::createOperate(OperationType::Mul)) << endl;
cout << cal(OperationSimpleFactory::createOperate(OperationType::Div)) << endl;
return 0;
}