Python设计模式之策略模式

本文探讨了设计模式中的策略模式,它允许在运行时选择不同的算法。通过定义一个抽象策略类和多个具体策略子类,实现了算法的封装和互换。文中提供了一个Python示例,展示了如何创建和切换不同策略,强调了策略模式带来的代码结构清晰和扩展性优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式

策略模式(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(),用于实现具体的算法。AddStrategySubtractStrategy分别是具体策略类,实现了execute()方法。

Calculator是环境类,用于存储当前使用的算法。客户端代码在创建Calculator对象时传入初始使用的算法,然后可以通过set_strategy()方法来更改算法,通过execute_strategy()方法来执行算法。

在客户端代码中,我们首先使用AddStrategy作为初始算法,执行5加2的计算;然后更改算法为SubtractStrategy,执行5减2的计算。

策略模式的优点是可以轻松地扩展算法集合,对于客户端代码来说,只需要知道如何使用Calculator类即可。同时,策略模式还可以避免大量的if..else语句,使代码结构更加清晰。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值