定义:前篇初期中,我们讲过行为型模式主要解决的问题是:
用于在不同的实体建进行通信,为实体之间的通信提供更容易,更灵活的通信方法。
特性:
模拟XXX超时日常的价格销售策略。
实现:
#!/usr/bin/evn python
# coding=utf-8
from abc import ABCMeta, abstractmethod
class PayMoney(metaclass=ABCMeta):
'''
抽象观察者
'''
@abstractmethod
def pay(self, money): pass
# 星期1——星期3:没任何折扣价(非会员)
class Week_1_3_PayMoney_Not_vip(PayMoney):
def pay(self, money):
return money
# 星期1——星期3:折扣价(会员)
class Week_1_3_PayMoney_vip(PayMoney):
def __init__(self, discount):
self.discount = discount
def pay(self, money):
return money * self.discount
# 星期4: 感恩节(不分非要和会员,统统9折)
class Week_4_PayMoney_Ganen(PayMoney):
def __init__(self, discount):
self.discount = discount
def pay(self, money):
return money * self.discount
# 星期6:周末大甩卖(不分非要和会员,统统5折)+ 赠送10元购物券(可抵扣)
class Week_6_PayMoney_Dsshuaimai(PayMoney):
def __init__(self, discount, gouwujuan_money, is_deduction =True):
self.discount = discount
self.gouwujuan_money = gouwujuan_money
self.is_deduction = is_deduction # 是否抵扣
def pay(self, money):
if self.is_deduction:
return (money * self.discount) - self.gouwujuan_money
return money * self.discount
class Shouyinyuan():
def __init__(self, pay_money):
self.pay_money = pay_money
def check_out(self, pay_all_oney):
return "应收:%s;实收%s" % (pay_all_oney, self.pay_money.pay(pay_all_oney))
#
print('星期1~3上班的收银人---收不是会员的客户(没任何的优惠):', Shouyinyuan(Week_1_3_PayMoney_Not_vip()).check_out(100))
print('星期1~3上班的收银人---收是会员的客户(0.98优惠):', Shouyinyuan(Week_1_3_PayMoney_vip(0.98)).check_out(100))
print('星期4上班的收银人---星期4: 感恩节(不分非要和会员,统统9折):', Shouyinyuan(Week_4_PayMoney_Ganen(0.90)).check_out(100))
print('星期6上班的收银人---周末大甩卖(不分非要和会员,统统5折)+ 赠送10元购物券(可抵扣10元):', Shouyinyuan(Week_6_PayMoney_Dsshuaimai(0.50,10,True)).check_out(100))
print('星期6上班的收银人---周末大甩卖(不分非要和会员,统统5折)+ 赠送10元购物券(不使用抵扣):', Shouyinyuan(Week_6_PayMoney_Dsshuaimai(0.50,10,False)).check_out(100))
输出:
星期1~3上班的收银人---收不是会员的客户(没任何的优惠): 应收:100;实收100
星期1~3上班的收银人---收是会员的客户(0.98优惠): 应收:100;实收98.0
星期4上班的收银人---星期4: 感恩节(不分非要和会员,统统9折): 应收:100;实收90.0
星期6上班的收银人---周末大甩卖(不分非要和会员,统统5折)+ 赠送10元购物券(可抵扣10元): 应收:100;实收40.0
星期6上班的收银人---周末大甩卖(不分非要和会员,统统5折)+ 赠送10元购物券(不使用抵扣): 应收:100;实收50.0
收银员可以应对根据实际情况采取不同的策略,对于不同的策略得出不同的结果,当需要更改策略时,只需要在实例化时传入不同的策略就可以了。
简书:https://www.jianshu.com/u/d6960089b087
掘金:https://juejin.cn/user/2963939079225608
小钟同学 | 文 【原创】| QQ:308711822
1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。