python简单的购物程序代码打折_策略模式----商场促销--Python版
策略模式
示例:
商场收银软件---营业员根据客户所购买商品的单价和数量,向客户收费。
商场会不定期的举行各种活动,如 满100减30, 满200减70, 打8折, 满100积分10点等。
很容易想到用简单工厂模式实现,如下图是简单工厂模式的UML类关系图。
收费类--父类
class CashSuper:
def AcceptCash(self, money):
pass
正常收费子类
class CashNormal(CashSuper):
def AcceptCash(self, money):
return money
折扣收费子类
class CashRebate(CashSuper):
def __init__(self, discount):
self.discount = discount
def AcceptCash(self, money):
return money * self.discount
返利收费子类
class CashReturn(CashSuper):
def __init__(self,mcondition,mreturn):
self.mcondition = mcondition
self.mreturn = mreturn
def AcceptCash(self, money):
if(money >= self.mcondition):
return money - self.mreturn
else:
return money
收费工厂类----
class CashFactory:
CashType = {}
CashType['1'] = CashNormal()
CashType['2'] = CashRebate(0.8)
CashType['3'] = CashReturn(500,100)
def GetResult(self, ch):
if ch in CashType:
op = CashType[ch]
return op
客户端主要程序是
if __name__ == '__main__':
money = raw_input("money is ")
cashtype = raw_input("cash type is : [1] for Normal, [2] for Rebate, [3] for Return ")
cashf = CashFactory()
cash = cashf.GetCashType(cashtype)
print cash.AcceptCash(money)
虽然工厂模式也能解决这个问题,但是工厂模式只能解决对象的创建问题。由于工厂本身包括了所有的收费方式,打折额度和返利方式可能经常变更,每次维护或扩展都要改动这个工厂,以至于代码需要重新部署。
无论是打折还是返利都是商家的促销策略,用工厂模式创建这些策略对象本身没错,这是这些策略相互替代的变化也同样需要封装。
策略模式
它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式分离了对象和其行为,对象根据策略不通,选择组合不同的行为。
用策略模式的UML关系图。
CashContext类
class CashContext:
def __init__(self, csuper): ## 通过构造函数,传入具体的收费策略
self.csuper = csuper
def GetResult(self):
return self.csuper.acceptCash(self, money) ##获得相应收费策略的结果
定义这样纯策略模式的CashContext类对象,会导致要在客户端去决定用哪一种收费策略。我们将策略模式与简单工厂模式结合,将选择收费策略的判断移到CashContext类中。
改进后的CashContext类
class CashContext:
CashStrategys = {}
CashStrategys['1'] = CashNormal()
CashStrategys['2'] = CashRebate()
CashStrategys['3'] = CashReturn()
def __init__(self, cashtype):
if cashtype in CashStrategys:
self.csuper = CashStrategys[cashtype]
def GetResult(self, money):
return self.csuper.acceptCash(self,money)
客户端主要代码:
if __name__ == '__main__':
money = raw_input("money is ")
cashtype = raw_input("cash type is : [1] for Normal, [2] for Rebate, [3] for Return ")
csuper = CashContext(cashtype)
cash = csuper.GetResult(money)
print cash
当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。将这些行为封装在一个个独立的策略类中,可以在使用这些行为的类中消除条件语句。
只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
python简单的购物程序代码打折_策略模式----商场促销--Python版相关推荐
- python简单的购物程序代码-Python实现购物程序思路及代码
要求: 启动程序后,让用户输入工资,然后打印出带有序号的商品列表 用户输入商品序号购买相应的商品,或者输入 " q " 退出购买界面 选择商品后,检查余额是否足够,够则直接扣款,不 ...
- python简单的爬虫程序代码_简单的电子邮件爬虫Python代码
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. import requests import re try: from urllib.pa ...
- python身份证城市定位程序输入点_有关一道身份证的python编程题
有关一道身份证的题目,要求python解决 就昨天晚上嗷一个妹纸问我这样一道问题哈: 问题: 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17 ...
- java基础代码实例_全网都在找的Python简单基础小程序的实例代码
这篇文章主要介绍了Python简单基础小程序的实例代码,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下. 1 九九乘法表 3 4 5 6 7for i in range(9):#从0循环到8 ...
- python基础代码事例-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
- python程序实例教程基础-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
- python经典程序实例-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
- python简单程序实例-Python简单基础小程序的实例代码
1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...
- python基础编程:Python简单基础小程序的实例代码
这篇文章主要介绍了Python简单基础小程序的实例代码,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下 1 九九乘法表 for i in range(9):#从0循环到8i += 1#等价于 ...
最新文章
- 完美的素数_JAVA
- C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
- 常规单元测试和存根–测​​试技术4
- 分析.cpp文件编译生成的汇编文件里语句的作用
- 使用iozone和bonnie测试磁盘IO
- 全球顶尖科学杂志:阿里AI语音技术超越谷歌,可读懂人类潜藏意图
- [转]解决IE下CSS背景图片闪烁的Bug
- 【Python】体育竞技分析
- 七:构造方法与自定义构造方法
- 一分钟了解阿里云产品:安骑士
- wget 下载文件出错
- MATLAB曲线平滑的办法
- 项目实战第一讲:如何优雅地记录操作日志
- 亿级流量电商JVM调优(转图灵学院)
- GitHub 上值得收藏的100个精选前端项目!
- Excel常用公式大全
- 一图秒懂:打开oracle归档模式,rman备份的前提条件
- HDU - 3556 - Continued Fraction
- 第六章: Cassandra架构--Cassandra:The Definitive Guide 2nd Edition
- 如何将windows安装在移动硬盘上