...

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() 方法时,环境会委托当前策略对象来执行具体的算法。需要注意的是,策略模式可以帮助我们将算法的实现与客户端的代码分离开来,从而提高代码的可维护性和可扩展性。

posted @ 2023-06-16 18:37  韩志超  阅读(98)  评论(0编辑  收藏  举报