策略模式
策略-顾名思义就是解决一件事情的不同方法。比如,一件商品再被购买之后,不同的用户有不同的折扣。比如,一个游戏玩家开枪,能够发射出不同伤害值的子弹。策略模式就是为了解决这类问题而产生的。
商品打折-策略实例1
问题描述:对于很多商品而言都有定价,但是商店有两种会员,高级VIP和VIP,高级VIP能够获得8折,而vip只能获取9折。而且后期还要拓展很多打折体系。
# 基础策略
class Discount:
# 折扣基类
def pay(self):
print('100% discount')
# 策略一
class VIPDiscount(Discount):
# vip折扣类
def pay(self):
print('VIP-80% discount')
# 策略二
class HigherVIPCount(Discount):
# HigherVIP类
def pay(self):
print('Higher VIP-90% discount')
# 策略三...
class Customer:
# 消费者类
# 实现调用所有策略的接口
def pay(self, Dis=None):
if Dis is None:
# 非会员调用的就是基类
Discount().pay()
else:
# 会员就要调用不同的会员策略
Dis().pay()
if __name__ == '__main__':
cus1 = Customer()
cus2 = Customer()
cus3 = Customer()
cus1.pay(HigherVIPCount)
cus2.pay(VIPDiscount)
cus3.pay()
>>> Higher VIP-90% discount
>>> VIP-80% discount
>>> 100% discount
# 即实现了不同用户的折扣策略不同
开枪-策略实例2
问题描述:同一把步枪在使用了不同配件之后有不同的伤害等
# 基础策略
class Fire:
# 开枪的基础伤害
def damage(self):
print('default damage 30')
# 策略一
class ArmorFire(Fire):
# 穿甲
def damage(self):
print('Armor damage 50')
# 策略二
class MuteFire(Fire):
# 消音
def damage(self):
print('Mute damage 25')
# 策略三...
class Gun:
# 策略的调用接口
def fire(self, Fir=None):
if Fir is None:
Fire().damage()
else:
Fir().damage()
if __name__ == '__main__':
gun_1 = Gun()
# 默认
gun_1.fire()
# 使用了穿甲
gun_1.fire(ArmorFire)
# 使用了消音
gun_1.fire(MuteFire)