在Python中实现策略模式通常涉及以下几个步骤:
1. 定义一个抽象策略接口,通常使用`ABC`模块中的`ABCMeta`和`abstractmethod`来创建。
2. 创建具体策略类,这些类实现抽象策略接口,并提供具体的算法实现。
3. 创建上下文类,该类持有一个策略对象的引用,并提供方法来设置和使用策略。
```python
from abc import ABC, abstractmethod
抽象策略接口
class Strategy(ABC):
@abstractmethod
def do_something(self):
pass
具体策略A
class ConcreteStrategyA(Strategy):
def do_something(self):
print("ConcreteStrategyA: Doing something.")
具体策略B
class ConcreteStrategyB(Strategy):
def do_something(self):
print("ConcreteStrategyB: Doing something.")
上下文类
class Context:
def __init__(self, strategy: Strategy):
self._strategy = strategy
def set_strategy(self, strategy: Strategy):
self._strategy = strategy
def do_strategy(self):
self._strategy.do_something()
使用示例
if __name__ == "__main__":
context = Context(ConcreteStrategyA())
context.do_strategy() 输出:ConcreteStrategyA: Doing something.
context.set_strategy(ConcreteStrategyB())
context.do_strategy() 输出:ConcreteStrategyB: Doing something.
在这个例子中,`Strategy`是一个抽象基类,定义了一个抽象方法`do_something`。`ConcreteStrategyA`和`ConcreteStrategyB`是具体策略类,它们分别实现了`do_something`方法。`Context`类作为上下文,持有一个策略对象的引用,并提供了`set_strategy`和`do_strategy`方法来设置和使用策略。
策略模式使得算法可以独立于使用它的客户而变化,简化了单元测试,因为每个算法都有自己的类,可以单独进行测试