📅  最后修改于: 2023-12-03 15:04:42.002000             🧑  作者: Mango
Python设计模式-策略模式是一种行为模式,它将一组行为分装到一个独立的策略类中,使得客户类在使用时能动态地选择其中的一种策略。使用策略模式可以避免使用大量的条件语句,提高程序的可维护性和灵活性。
策略模式的实现需要定义一个策略接口和一组实现这个接口的具体策略类。下面是一个简单的示例:
from abc import ABC, abstractmethod
class Strategy(ABC):
@abstractmethod
def execute(self, nums):
pass
class BubbleSort(Strategy):
def execute(self, nums):
# 对nums进行冒泡排序
return nums
class QuickSort(Strategy):
def execute(self, nums):
# 对nums进行快速排序
return nums
class SelectionSort(Strategy):
def execute(self, nums):
# 对nums进行选择排序
return nums
class Context:
def __init__(self, strategy):
self.strategy = strategy
def set_strategy(self, strategy):
self.strategy = strategy
def execute_strategy(self, nums):
return self.strategy.execute(nums)
以上代码中,首先定义了一个Strategy
接口,其中包含一个execute
方法,用于执行具体的策略。然后定义了三个具体的策略类BubbleSort
、QuickSort
和SelectionSort
,它们分别实现了Strategy
接口中的execute
方法。
最后,定义了一个Context
类作为调用策略的客户类,其中包含一个set_strategy
方法,用于设置策略;以及一个execute_strategy
方法,用于执行具体的策略。
在使用策略模式时,需要首先创建一个Context
对象,然后根据需要设置相应的策略。接下来就可以使用execute_strategy
方法来调用具体的策略了。以下是一个使用策略模式的示例:
# 创建Context对象
context = Context(BubbleSort())
# 执行冒泡排序策略
print(context.execute_strategy([3, 5, 2, 4, 1]))
# 切换到快速排序策略
context.set_strategy(QuickSort())
print(context.execute_strategy([3, 5, 2, 4, 1]))
# 切换到选择排序策略
context.set_strategy(SelectionSort())
print(context.execute_strategy([3, 5, 2, 4, 1]))
以上代码中,首先创建了一个Context
对象,并设置默认的策略为BubbleSort
。接下来依次执行了冒泡排序、快速排序和选择排序策略。这里输出结果均为[1, 2, 3, 4, 5]
,说明策略模式成功地实现了。
策略模式是一个非常灵活的设计模式,它可以让程序员根据需要动态地选择具体的策略,而不必关心具体实现细节。在Python中,策略模式通常使用抽象基类的方式进行定义,而具体的策略类则根据需要进行编写。