第2章商场促销(1)——工厂模式

/*shop.h文件*/
#ifndef _SHOP_
#define _SHOP_
#include<iostream>
#include<string>

//现金收费抽象类
class Cashsuper
{
public:
	virtual double acceptcash(double money);
};

//正常收费子类
class cashnormal:public Cashsuper
{
public:
	virtual double acceptcash(double money);
};

//打折收费子类
class cashrebate:public Cashsuper
{
public:
	cashrebate():moneyrebate(0.1){}
	virtual double acceptcash(double money);
	void calcute_rebate(std::string moneystring);
private:
	double moneyrebate;//打折率
};

//返利收费子类
class cashreturn:public Cashsuper
{
public:
	void MoneyReturn(std::string moneycondition_str,std::string moneyreturn_str);
	virtual double acceptcash(double money);
private:
	double moneycondition;//返利条件(如满300)
	double moneyreturn;//返利值(返100)
};

//现金收费工厂类
class CashFactory
{
public:
	static Cashsuper* createcashaccept(std::string type);
};

#endif

  

/*shop,cpp文件*/
#include<iostream>
#include"shop.h"
using namespace std;

//现金收费的抽象类(函数定义)
double Cashsuper::acceptcash(double money)
{
	return money;
}

//正常收费的子类(函数定义)
double cashnormal::acceptcash(double money)
{
	return money;
}

//打折收费的子类(函数定义)
void cashrebate::calcute_rebate(std::string moneystring)
{
	if(moneystring=="打八折")
		moneyrebate=0.8;
	else if(moneystring=="打九折")
		moneyrebate=0.9;
}
double cashrebate::acceptcash(double money)
{
	return money*moneyrebate;
}

//返利收费的子类(函数定义)
void cashreturn::MoneyReturn(std::string moneycondition_str,std::string moneyreturn_str)
{
	if(moneycondition_str=="满100")
		moneycondition=100;
	if(moneycondition_str=="满200")
		moneycondition=200;
	if(moneycondition_str=="满300")
		moneycondition=300;

	if(moneyreturn_str=="返10")
		moneyreturn=10;
	if(moneyreturn_str=="返50")
		moneyreturn=50;
	if(moneyreturn_str=="返100")
		moneyreturn=100;
}
double cashreturn::acceptcash(double money)
{
	double result=money;
	if(result>=moneycondition)
		result=money-moneyreturn;
	return result;
}

//现金收费工厂类(函数定义)
 Cashsuper* CashFactory::createcashaccept(std::string type)
{
	Cashsuper* cs=NULL;
	if(type=="正常收费")
		cs=new cashnormal;
	else if(type=="满300返100")
	{
		cashreturn* csre=new cashreturn;
		csre->MoneyReturn("满300","返100");
		cs=csre;
	}
	else if(type=="打八折")
	{
		cashrebate* csreb=new cashrebate;
		csreb->calcute_rebate("打八折");
		cs=csreb;
	}
	else
		exit(1);
	return cs;
 }

  

/*main.cpp文件*/
#include "shop.h"
#include<iostream>

using namespace std;

int main()
{
	string type;
	cin>>type;
	Cashsuper* csuper=CashFactory::createcashaccept(type);
	double totleprices=1000;
	double totle=0.0;
	totle=csuper->acceptcash(totleprices);
	cout<<totle<<endl;
	system("pause");
	return 0;
}

  

时间: 2024-10-29 00:36:32

第2章商场促销(1)——工厂模式的相关文章

大话设计模式第二章---商场促销简单工厂模式、策略模式 PHP实现及对比

简单工厂模式: <?php abstract class Cash_super { abstract public function accept_cash(float $money); } class Cash_normal extends Cash_super { public function accept_cash(float $money) { return $money; } } class Cash_rebate extends Cash_super { private $_mon

《大话设计模式》——读后感 (2)商场促销?——策略模式

 按照我的习惯,先看策略模式UML结构图: 从图中,我看到了Strategy类,还有具体的实现类,还有一个Context,感觉和简单工厂好像啊,只是名字不一样而已.此处,我还用接口. 什么是策略模式呢? 实现: 原文是针对商场促销进行各种各样的打折进行设计案例的,而大话设计模式中还提到: 等等,打折.返现等等一系列促销具体方式只是一些算法,而算法本身也是一种策略.那我在此就要偷懒了: Operation接口,OperationAdd.OperationDelete.OperationDIv.Op

第 2 章 商场促销——策略模式

背景:做一个商场收银软件 收费情形:正常收费.打八折.打七折.打五折 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合. 策略模式的Strategy类参差为Context定义了一系列的可供重用的算法或行为.继承又助于析取出这些算法中的公共功能. 策略模式的优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的借口单独测试. 当不同的行为堆砌在一个类中时,就很难避免使用条

第2章商场促销(3)——策略与简单工厂结合

/*shop.h文件*/ #ifndef _SHOP_ #define _SHOP_ #include<iostream> #include<string> //现金收费抽象类 class Cashsuper { public: virtual double acceptcash(double money); }; //正常收费子类 class cashnormal:public Cashsuper { public: virtual double acceptcash(doubl

第2章商场促销(2)——策略模式

/*shop.h文件*/ #ifndef _SHOP_ #define _SHOP_ #include<iostream> #include<string> //现金收费抽象类 class Cashsuper { public: virtual double acceptcash(double money); }; //正常收费子类 class cashnormal:public Cashsuper { public: virtual double acceptcash(doubl

(三) 简单工厂模式

转载: http://www.cnblogs.com/zuoxiaolong/p/pattern4.html 上一章我们着重讨论了代理模式,以及其实现原理,相信如果你看完了整篇博文,应该就对代理模式很熟悉了. 本章我们讨论简单工厂模式,LZ当初不小心夸下海口说不和网络上传播的教学式模式讲解雷同,所以现在感觉写一篇博文压力颇大. 如何来介绍简单工厂呢,LZ着实费了不少心思,这个模式本身不复杂,但其实越是不复杂的模式越难写出特点,因为它太简单. 为了便于各位看后面例子的时候容易理解,LZ这里先给出引

二、策略模式-商场促销活动

以商场收银为例,理解并实践"策略模式". 简单商场促销活动描述:营业员提供商品单价.数量.商场目前的活动(满减.打折等),计算用户最终需要支付的金额. 一.面向过程的实现方式 1 package secondStrategy; 2 import java.text.DecimalFormat; 3 public class StrategyTest { 4 public static void main(String[] args) { 5 // 营业员提供信息 6 double to

第15章 就不能换DB吗?—抽象工厂模式

由于抽象工厂在我们编程当中经常使用和常见,所有本篇文章对<大话设计模式>中的15章做了很详细的比较.通过一个Dao层可以更换访问任意数据库的例子来学习抽象工厂模式.例如:Dao层可以访问Sqlserver数据库,也可以访问Access数据库,当程序新增访问Oracle数据库时,无需修改现有代码,只需要添加访问Oracle相关的类就可以,实现了开闭原则.本篇文章的例子中每种数据库上都有User和Department表,我们Dao层对这两个表进行查询和插入操作. 最基本数据库访问 一下是访问Sql

第3章 抽象工厂模式(Abstract Factory)

原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换. 看下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54