策略模式是把一系列可互换的算法封装起来,并且在运行时让算法随时切换,同时不影响算法的使用者,比如军队在作战过程中,不断地调整作战策略,这里面包含策略和使用者两个对象。
① 策略
- 策略父类
import abc
class Strategy(metaclass=abc.ABCMeta):
@abc.abstractmethod
def execute(self):
pass2. 各个具体的策略类
class Attack(Strategy):
def __init__(self, level):
self.level = level
def execute(self):
print(f"执行 {self.level} 级别的进攻")
class Defend(Strategy):
def __init__(self, level):
self.level = level
def execute(self):
print(f"执行 {self.level} 级别的防守")
class Retreat(Strategy):
def __init__(self, distance):
self.distance = distance
def execute(self):
print(f"撤退 {self.distance} 公里")
class Surrender(Strategy):
@classmethod
def execute(cls):
print("投降")② 军队
class Army:
strategy = None
@classmethod
def set_strategy(cls, strategy):
cls.strategy = strategy
@classmethod
def execute(cls):
if cls.strategy:
cls.strategy.execute()
else:
print("暂无策略")③ 军队在作战过程中不断调整策略
Army.execute()
Army.set_strategy(Attack(10))
Army.execute()
Army.set_strategy(Defend(5))
Army.execute()
Army.set_strategy(Retreat(30))
Army.execute()
Army.set_strategy(Surrender)
Army.execute()