Python与设计模式:策略模式
完成一项任务往往有多种方式,我们将其称之为策略。
比如,超市做活动,如果你的购物积分满1000,就可以按兑换现金抵用券10元,如果购买同一商品满10件,就可以打9折,如果如果购买的金额超过500,就可以享受满减50元的优惠。这是三个不同的促销策略。
再比如,联系朋友、同学,可以打电话,也可以发短信,可以发微信,也可以发邮件,这是四个不同的联系策略。
再比如,去外出旅游,我们可以选择火车,也可以选择公共汽车,可以选择飞机,也可以选择自驾游。这又是四个不同的出行策略。
以上这些真实场景,都有策略选择模型的影子,可以考虑使用策略模式。
经典的策略模式,是由三部分组成
- Context:上下文环境类
- Stragety:策略基类
- ConcreteStragety:具体策略
以个超市做活动的场景来举个例子。
- Context:Order类,订单信息,包括商品,价格和数量,以为购买者等
- Stragety:Promotion类,抽象基类,包含一个抽象方法(计算折扣)
- ContreteStragety:分三个类,FidelityPromo,BulkItemPromo,LargeOrderPromo,实现具体的折扣计算方法。
首先是 Order 类:
class Item:
def __init__(self, issue, price, quantity):
self.issue = issue
self.price = price
self.quantity = quantity
def total(self):
return self.price * self.quantity
class Order:
def __init__(self, customer, promotion=None):
self.cart = []
self.customer = customer
self.promotion = promotion
def add_to_cart(self, *items):
for item in items:
self.cart.append(item)
def total(self):
total =
for item in self.cart:
total += item.total()
return total
def due(self):
if not self.promotion:
discount =
else:
discount = self.promotion.discount(self)
return (self.total() - discount)
相关文章