最佳选项设计模式(也称为策略模式)是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。
在这种模式中,我们创建表示各种策略的对象和一个行为根据策略对象改变的上下文对象。策略对象改变上下文对象的执行算法。
1. 定义
- 策略(Strategy):定义了所有支持的算法的公共接口。
- 具体策略(Concrete Strategy):实现了算法的不同变体。
- 上下文(Context):持有某个策略的引用,并通过该策略来执行算法。
2. 使用场景
当你需要在运行时选择不同的算法实现时,可以考虑使用策略模式。例如,在游戏开发中,不同类型的敌人可能有不同的攻击方式;或者在电子商务应用中,不同的支付方式可以被视为不同的策略。
3. 示例代码
假设我们正在开发一个简单的游戏,游戏中有两种敌人:一种是近战敌人,另一种是远程敌人。每种敌人都有不同的攻击方式。
from abc import ABC, abstractmethod
# 策略接口
class AttackStrategy(ABC):
@abstractmethod
def attack(self):
pass
# 具体策略
class MeleeAttack(AttackStrategy):
def attack(self):
return "近战攻击"
class RangedAttack(AttackStrategy):
def attack(self):
return "远程攻击"
# 上下文
class Enemy:
def __init__(self, strategy: AttackStrategy):
self._strategy = strategy
def set_strategy(self, strategy: AttackStrategy):
self._strategy = strategy
def attack(self):
return self._strategy.attack()
# 客户端代码
if __name__ == "__main__":
melee_enemy = Enemy(MeleeAttack())
print(melee_enemy.attack()) # 输出: 近战攻击
ranged_enemy = Enemy(RangedAttack())
print(ranged_enemy.attack()) # 输出: 远程攻击
# 动态改变策略
melee_enemy.set_strategy(RangedAttack())
print(melee_enemy.attack()) # 输出: 远程攻击