设计模式
策略模式(Strategy Pattern)是指定义一系列算法,将每个算法封装起来,使它们可以相互替换。策略模式可以让算法独立于使用它的客户端而变化。
案例学习
在Python中,策略模式的实现需要使用到多态和继承。首先定义一个抽象基类,然后定义不同的子类来实现不同的算法,最后在客户端代码中引用这些算法即可。
下面是一个简单的示例代码:
from abc import ABC, abstractmethod
# 抽象策略类
class Strategy(ABC):
@abstractmethod
def execute(self, num1, num2):
pass
# 具体策略类1
class AddStrategy(Strategy):
def execute(self, num1, num2):
return num1 + num2
# 具体策略类2
class SubtractStrategy(Strategy):
def execute(self, num1, num2):
return num1 - num2
# 环境类
class Calculator:
def __init__(self, strategy):
self.strategy = strategy
def set_strategy(self, strategy):
self.strategy = strategy
def execute_strategy(self, num1, num2):
return self.strategy.execute(num1, num2)
# 客户端代码
if __name__ == '__main__':
add_strategy = AddStrategy()
subtract_strategy = SubtractStrategy()
calculator = Calculator(add_strategy)
print(calculator.execute_strategy(5, 2))
calculator.set_strategy(subtract_strategy)
print(calculator.execute_strategy(5, 2))
在上面的示例代码中,抽象策略类Strategy
定义了一个抽象方法execute()
,用于实现具体的算法。AddStrategy
和SubtractStrategy
分别是具体策略类,实现了execute()
方法。
Calculator
是环境类,用于存储当前使用的算法。客户端代码在创建Calculator
对象时传入初始使用的算法,然后可以通过set_strategy()
方法来更改算法,通过execute_strategy()
方法来执行算法。
在客户端代码中,我们首先使用AddStrategy
作为初始算法,执行5加2的计算;然后更改算法为SubtractStrategy
,执行5减2的计算。
策略模式的优点是可以轻松地扩展算法集合,对于客户端代码来说,只需要知道如何使用Calculator
类即可。同时,策略模式还可以避免大量的if..else
语句,使代码结构更加清晰。