Python设计模式:策略模式

·  阅读 119
原文链接: zhuanlan.zhihu.com

策略模式是把一系列可互换的算法封装起来,并且在运行时让算法随时切换,同时不影响算法的使用者,比如军队在作战过程中,不断地调整作战策略,这里面包含策略使用者两个对象。

① 策略

  1. 策略父类
import abc

class Strategy(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def execute(self):
        pass复制代码

2. 各个具体的策略类

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()复制代码

收藏成功!
已添加到「」, 点击更改