📜  Python设计模式-策略(1)

📅  最后修改于: 2023-12-03 15:04:42.002000             🧑  作者: Mango

Python设计模式-策略

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方法,用于执行具体的策略。然后定义了三个具体的策略类BubbleSortQuickSortSelectionSort,它们分别实现了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中,策略模式通常使用抽象基类的方式进行定义,而具体的策略类则根据需要进行编写。