1.開放封閉原則
------新增操作類型時,不修改以前的代碼
2.面向?qū)ο蟮姆庋b梢什,繼承和多態(tài)
------實現(xiàn)計算類時,使用面向?qū)ο蟮乃枷?/p>
簡單工廠模式和工廠模式都集中封裝了對象的創(chuàng)建,使得更換對象時,不需要做大的改動就可以實現(xiàn)撕攒,降低了客戶程序與產(chǎn)品對象的耦合。
由于使用了多態(tài)烘浦,保持了不需要知道具體實現(xiàn)的優(yōu)點且克服了沒新增一種操作就要修改工廠類的缺點抖坪。
但工廠方法的缺點也顯而易見:每增加一種操作,就要增加一個工廠的類闷叉,增加了額外的開發(fā)量擦俐。
代碼實現(xiàn)如下:
#include <stdio.h>
using namespace std;
class OperateTmp
{
public:
double numA;
double numB;
virtual double GetResult() = 0;
};
class Add: public OperateTmp
{
public:
double GetResult()
{
return numA + numB;
}
};
class Sub: public OperateTmp
{
public:
double GetResult()
{
return numA - numB;
}
};
class OperateFactory
{
public:
virtual OperateTmp* create() = 0;
};
class AddFactory:public OperateFactory
{
public:
OperateTmp* create()
{
return new Add();
}
};
class SubFactory:public OperateFactory
{
public:
OperateTmp* create()
{
return new Sub();
}
};
int main()
{
double numA(0.0),numB(0.0);
char OperCh;
scanf("%lf %lf %c",&numA,&numB,&OperCh);
OperateFactory* fac = NULL;
if(OperCh == '+')
{
fac = new AddFactory();//后續(xù)新增操作,只需要修改這里然后新增工廠類和操作類即可片习。不影響以前的實現(xiàn)
OperateTmp* oper = fac->create();
if(oper)
{
oper->numA = numA;
oper->numB = numB;
printf("%lf",oper->GetResult());
delete oper;
oper = NULL;
}
delete fac;
fac = NULL;
}
return 0;
}