第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(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 cashcontxt
{
public:
	cashcontxt(Cashsuper* cs){
		this->cas=cs;
	}
	double getresult(double money);
private:
	Cashsuper* cas;
};

#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;
}

double cashcontxt::getresult(double money)
{
	return cas->acceptcash(money);
}

  

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

using namespace std;

int main()
{
	/*
	string type="打八折";
	cashrebate *cx;
	cx=new cashrebate;
	cx->calcute_rebate(type);
	*/

	string type="满300返100";
	cashreturn *cx;
	cx=new cashreturn;
	cx->MoneyReturn("满300","返100");

	cashcontxt *cs;
	cs=new cashcontxt(cx);
	cout<<cs->getresult(1000)<<endl;

	system("pause");
	return 0;
}

  

时间: 2024-10-16 22:35:00

第2章商场促销(2)——策略模式的相关文章

大话设计模式第二章---商场促销简单工厂模式、策略模式 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章商场促销(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(doubl

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

JavaScript版本的策略模式

俗话说,条条大路通罗马.在美剧<越狱>中,主角Michael Scofield就设计了两条越狱的道路.这两条道路都可以到达靠近监狱外墙的医务室. 同样,在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但是不在乎钱,可以选择坐飞机. 如果没有钱,可以选择坐大巴或者火车. 如果再穷一点,可以选择骑自行车. 在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zi

一:策略模式

下面全是个人理解. Head First 第一章中讲的策略模式,我觉得是所有设计 模式中最基本的. 它提到了几个设计原则:都是我们平常编程中用到的. 1:将应用中变化之处和,不需要变化之处分离出来.这其实就很类似,封装的定义: 2:面向接口编程,而不是面向实现编程.想想我们在做web项目时,servie层,以及dao层,都是面向接口编程的,为的就是如果换掉数据库实现,那么在action层,我们就不需要更改代码了. 3:少用继承,多用组合.我们在做web项目时,service实现中,包含有dao的

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

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