比较简单的一个设计模式,附上自己的demo 和讲解ppt:
ppt下载:传送门
Code:
# coding=utf-8
# @Author : LYG
# @Time : 2019/4/8 10:53
# @Name : strategy.py
"""
策略模式
"""
class ChargeMode:
"""
收费模式的抽象类
"""
def get_money(self, money):
pass
class NormalMode(ChargeMode):
"""
正常收费模式
"""
def get_money(self, money):
return money
class SaleMode(ChargeMode):
"""
打折收费模式
"""
def __init__(self, discount):
self.discount = discount
def get_money(self, money):
return money * self.discount / 10.0
class ReturnMode(ChargeMode):
"""
消费返利模式
"""
def __init__(self, return_condition, return_money):
self.return_condition = return_condition
self.return_money = return_money
def get_money(self, money):
if money >= self.return_condition:
return money - (money // self.return_condition) * self.return_money
else:
return money
class Context:
"""
消费策略环境类
"""
def __init__(self, charge_mode):
self.charge_mode = charge_mode
def payment(self, money):
return self.charge_mode.get_money(money)
if __name__ == '__main__':
money = 200
normal_mode = Context(NormalMode())
sale_mode = Context(SaleMode(9))
return_mode = Context(ReturnMode(100, 20))
print("商品原价:{!r} 元".format(money))
print("正常售价:{!r} 元".format(normal_mode.payment(money)))
print("打折促销八折售价: {!r}元".format(sale_mode.payment(money)))
print("返利促销实际支付:{!r}元".format(return_mode.payment(money)))