您的位置:首页 > 其它

设计模式实现(一)---简单工厂模式

2014-07-24 18:38 393 查看
简单工厂模式的作用是将逻辑功能部分(算法)与界面功能部分(客户端)的代码分开。做到业务的封装,达到易维护、易扩展。下面见源码

逻辑功能部分(算法部分)

//cash.h
class CashSuper	//base class
{
public:
virtual double acceptCash(double money) = 0;
};
class CashNormal : public CashSuper
{
public:
double acceptCash(double money)
{
return money;
}
};
class CashRebate : public CashSuper
{
public:
CashRebate(double rebate){moneyRebate = rebate;}
public:
double acceptCash(double money)
{
return money*moneyRebate;
}
private:
double moneyRebate;
};
class CashReturn : public CashSuper
{
public:
CashReturn(double condition,double returnback)
{
moneyCondition = condition;
moneyReturn = returnback;
}
public:
double acceptCash(double money)
{
if(money > moneyCondition)
{
return money - ((int)money / (int)moneyCondition)*moneyReturn;
}
else
return money;
}
private:
double moneyCondition;
double moneyReturn;
};


工厂部分

//factory.h
//工厂部分
#include <string.h>
#include "cash.h"
class MoneyFactory
{
public:
MoneyFactory(){moneyType = NULL;}
~MoneyFactory()
{
if(this->moneyType!=NULL)
{
delete this->moneyType;
moneyType = NULL;
}
}
public:
CashSuper *createMoneyType(char *in)
{
if(this->moneyType!=NULL)
{
delete this->moneyType;
moneyType = NULL;
}

if(strcmp(in,"正常收费")==0)
{
moneyType = new CashNormal();
}
else if(strcmp(in,"满300减100")==0)
{
moneyType = new CashReturn(300,100);
}
else if(strcmp(in,"打8折")==0)
{
moneyType = new CashRebate(0.8);
}
return moneyType;
}
private:
CashSuper *moneyType;  //利用父类指针调用子类方法
};


客户端部分

//客户端中,需要同时知道两个类,一个是MoneyFactory,另一个是CashSuper
//好处:不需要再客户端里判断用那个方法,将业务和逻辑(算法)与客户端分开。
#include "Factory.h"
#include <stdio.h>
int main()
{
MoneyFactory factory;
CashSuper *cash = factory.createMoneyType("正常收费");
printf("%f \n",cash->acceptCash(500));
cash = factory.createMoneyType("满300减100");
printf("%f \n",cash->acceptCash(500));
cash = factory.createMoneyType("打8折");
printf("%f \n",cash->acceptCash(500));
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: