Python设计模式-14-策略模式
策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式通常包括以下几个角色:
-
环境(Context):维护一个对策略对象的引用,并将客户端请求委托给当前策略对象。
-
抽象策略(Strategy):定义了一个接口,用于封装具体算法的实现。
-
具体策略(Concrete Strategy):实现了抽象策略定义的接口,并具体地实现了算法。
下面是一个简单的 Python 示例,演示了如何使用策略模式:
class Context:
def __init__(self, strategy):
self.strategy = strategy
def set_strategy(self, strategy):
self.strategy = strategy
def do_something(self):
self.strategy.do_something()
class Strategy:
def do_something(self):
pass
class ConcreteStrategyA(Strategy):
def do_something(self):
print('ConcreteStrategyA: Doing something.')
class ConcreteStrategyB(Strategy):
def do_something(self):
print('ConcreteStrategyB: Doing something.')
context = Context(ConcreteStrategyA())
context.do_something()
context.set_strategy(ConcreteStrategyB())
context.do_something()
在上面的示例中,我们定义了一个环境 Context,它维护一个对策略对象的引用,并将客户端请求委托给当前策略对象。然后,我们定义了一个抽象策略 Strategy,它定义了一个接口 do_something(),用于封装具体算法的实现。接下来,我们定义了两个具体策略 ConcreteStrategyA 和 ConcreteStrategyB,它们实现了抽象策略定义的接口,并具体地实现了算法。
在使用策略模式时,我们可以通过创建一个环境和多个策略来实现算法的相互替换。在上面的示例中,我们创建了一个环境 Context 和两个具体策略 ConcreteStrategyA 和 ConcreteStrategyB,并将它们组合在一起。当客户端调用 do_something() 方法时,环境会委托当前策略对象来执行具体的算法。需要注意的是,策略模式可以帮助我们将算法的实现与客户端的代码分离开来,从而提高代码的可维护性和可扩展性。