// 4_FactoryMethod_0.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/**
* 工厂方法模式(Factory Method): 定义一个用户创建对象的接口,让子类决定实例化哪一个类;
* 工厂方法使一个类的实例化延迟到其子类
**/
class Operation
{
public:
double numberA;
double numberB;
double numberResult;
public:
void setNumberA(double numA){ numberA = numA; }
void setNumberB(double numB){ numberB = numB; }
double getNumberA(){ return numberA; }
double getNumberB(){ return numberB; }
public:
virtual double getOperateResult() = 0;
};
class OperateAdd : public Operation
{
public:
virtual double getOperateResult() override
{
return numberA + numberB;
}
};
class OperateSub : public Operation
{
public:
virtual double getOperateResult() override
{
return numberA - numberB;
}
};
class OperateMulti : public Operation
{
public:
virtual double getOperateResult() override
{
return numberA * numberB;
}
};
class OperateDevide : public Operation
{
public:
virtual double getOperateResult() override
{
if (numberB == 0)
{
return 0;
}
return numberA / numberB;
}
};
class IFactory
{
public:
virtual Operation* CreateOperation() { return nullptr; }
};
class AddFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperateAdd();
}
};
class SubFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperateSub();
}
};
class MultiFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperateMulti();
}
};
class DevideFactory : public IFactory
{
public:
Operation* CreateOperation()
{
return new OperateDevide();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
IFactory * pIFactory = new AddFactory();
Operation* per = pIFactory->CreateOperation();
per->setNumberA(1);
per->setNumberB(4);
double result = per->getOperateResult();
cout << "result:" << result << endl;
return 0;
}
运行结果: