策略模式使用场景:会有很多子类,并且需要动态更改行为是使用,动态更改行为就是使用不同子类的方法;
如果项目中有大量的 if-elif,可以用策略模式进行优化;
1、假如有一款游戏,角色有不同的攻击模式,并且由于业务的需求,可能会再继续添加多种攻击模式,在游戏运行的过程中也需要在不同攻击模式中切换;
class Attack:
def shoot(self):
pass
class Jinzhan(Attack):
def shoot(self):
print('近战...')
class Yuancheng(Attack):
def shoot(self):
print('远程攻击...')
class Role:
def __init__(self, attack=None):
self.attack = attack
def set_attack(self, attack):
self.attack = attack
def gogogo(self):
self.attack.shoot()
if __name__ == '__main__':
role = Role()
role.set_attack(Jinzhan())
role.gogogo()
role.set_attack(Yuancheng())
role.gogogo()
2、由于业务增长,再添加多种攻击模式(还可以有多个不同的角色)
class Roubo(Attack):
def shoot(self):
print('肉搏....')
class Dadao(Attack):
def shoot(self):
print('用刀砍....')
if __name__ == '__main__':
role = Role()
role.set_attack(Jinzhan())
role.gogogo()
role.set_attack(Yuancheng())
role.gogogo()
role.set_attack(Roubo())
role.gogogo()
role.set_attack(Dadao())
role.gogogo()