策略模式 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
–摘自《大话设计模式》
通俗讲,一位军师,他晓得36计,他会给不同的武将授予外表相同的锦囊,但锦囊里的计策是不一样的,要根据不同的武将上报的情况,制定不同的计策,并将计策写好,放入锦囊中。对于武将而言,他只需要上报情况,获得锦囊,在合适的时机,打开锦囊,执行计策。这时候,就需要用到策略模式,每个锦囊就代表一个策略。
定义一个抽象类 Strategy,军师脑瓜子里首先要有计策的构思,至于用哪个看武将汇报的情况(在这里我们暂且一种情况只用一个计策)
class Strategy:
"""抽象类"""
def do_operation(self, num1, num2):
pass
具体的三十六计的设计,要继承抽象类
class Strategy01(Strategy):
def do_operation(self):
print("瞒天过海")
class Strategy02(Strategy):
def do_operation(self):
print("围魏救赵")
...
class Strategy36(Strategy):
def do_operation(self):
print("走为上策")
军师计策类 Context(实在想不到好的英文单词~~~勒)的设计
class Context:
strategy = Strategy()
def __init__(self, strategy): # 构造方法
self.strategy = strategy
def write_strategy(self):
self.strategy.do_operation()
print("将计策写好")
具体实现
context02 = Context(Strategy02())
print(context02.execute_strategy())
context21 = Context(Strategy21())
print(context21.execute_strategy())