【python设计模式】13、策略模式

这篇具有很好参考价值的文章主要介绍了【python设计模式】13、策略模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哲学思想:

策略模式是一种设计模式,它可以使得我们在程序中根据需要动态地选择算法的具体实现方式。策略模式的思想源于哲学中的“多元论”(pluralism)和“实用主义”(pragmatism)。

多元论认为,世界上存在着许多不同的观点和方法,没有一个固定的标准或者方法是绝对正确的。实用主义则认为,我们应该根据具体情况和实际需要选择最合适的方法,而不是一味追求理论上的完美。

在策略模式中,我们将每个算法实现封装成一个单独的类,这些类之间可以相互替换,从而实现动态选择算法的目的。这样做的好处是,我们可以在运行时根据具体情况选择最合适的算法,而不需要在编译时就确定使用哪个算法。这样的设计使得程序更加灵活、可扩展和可维护。

总之,策略模式的思想是在多元论和实用主义的基础上,通过将不同的算法实现封装成单独的类,实现动态选择算法的目的。这种设计思想可以使程序更加灵活、可扩展和可维护,从而更好地适应不同的实际需求。

简介:

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态地改变对象的行为。这种模式将不同的算法封装成独立的策略类,并使它们之间可以相互替换,从而使得算法的选择可以独立于使用它的客户端而变化。

策略模式包含三个角色:

  1. 策略接口(Strategy Interface):定义了算法的接口,具体的策略类需要实现这个接口。

  2. 具体策略类(Concrete Strategy Class):实现了策略接口定义的算法。

  3. 环境类(Context Class):持有一个策略类的引用,并且在需要时调用策略类中的算法。

使用策略模式可以使得代码更加灵活和可扩展,因为可以动态地切换算法而不需要改变客户端代码。同时,策略模式也可以避免大量的条件语句和switch语句,提高代码的可读性和可维护性。

优点:

  1. 可以提高代码的灵活性和可扩展性。通过将算法封装成独立的策略类,可以在运行时动态地切换算法而不需要修改客户端代码。

  2. 可以避免大量的条件语句和switch语句。如果不使用策略模式,可能需要编写很多条件语句或switch语句来处理不同的算法,这会使得代码变得复杂、难以维护和扩展。

  3. 可以提高代码的可读性和可维护性。策略模式将算法的实现从客户端代码中分离出来,使得代码更加简洁、清晰和易于理解。

  4. 可以支持不同的算法组合。通过将算法封装成独立的策略类,可以方便地实现不同的算法组合,从而满足不同的需求。

  5. 可以提高代码的重用性。如果需要在不同的应用场景中使用相同的算法,可以将这些算法封装成独立的策略类,并在不同的应用场景中复用这些策略类。

缺点:

  1. 增加了类的数量。策略模式需要定义多个策略类来实现不同的算法,这样就会增加类的数量,使得代码变得复杂。

  2. 客户端需要了解不同的策略类。客户端需要知道不同的策略类,才能选择合适的算法,这可能会增加客户端代码的复杂性。

  3. 策略模式可能会导致性能下降。如果使用策略模式来处理简单的算法,可能会因为多次调用策略类的方法而导致性能下降。

  4. 策略模式可能会导致代码重构。如果需要添加新的算法,可能需要创建新的策略类,并修改环境类的代码,这可能会导致代码重构。

实际应用场景:

  1. 电商平台优惠券:电商平台常常会推出各种优惠券活动,不同的优惠券有不同的优惠规则。使用策略模式可以将优惠规则封装成不同的策略类,用户可以根据需要选择不同的优惠策略。

  2. 游戏 AI:游戏中的 AI 通常需要根据不同的情况选择不同的策略来进行决策。例如,在一个战略游戏中,AI 可以根据不同的战局情况选择不同的进攻策略或防守策略。

  3. 订单处理:在订单处理系统中,不同的订单可能需要不同的处理策略。例如,某些订单需要进行人工审核,而另一些订单可以直接自动处理。使用策略模式可以将不同的处理策略封装成不同的策略类,并根据订单类型选择相应的策略类来处理订单。

  4. 数据加密:在数据加密系统中,不同的加密算法可能具有不同的安全性和性能。使用策略模式可以将不同的加密算法封装成不同的策略类,用户可以根据需要选择不同的加密策略。

代码实现:

# 策略接口
class Strategy:
    def do_operation(self, num1, num2):
        pass

# 加法策略
class AddStrategy(Strategy):
    def do_operation(self, num1, num2):
        return num1 + num2

# 减法策略
class SubtractStrategy(Strategy):
    def do_operation(self, num1, num2):
        return num1 - num2

# 乘法策略
class MultiplyStrategy(Strategy):
    def do_operation(self, num1, num2):
        return num1 * num2

# 策略上下文
class Context:
    def __init__(self, strategy):
        self.strategy = strategy

    def execute_strategy(self, num1, num2):
        return self.strategy.do_operation(num1, num2)

# 使用示例
if __name__ == '__main__':
    num1, num2 = 10, 5

    add_strategy = AddStrategy()
    context = Context(add_strategy)
    result = context.execute_strategy(num1, num2)
    print(f"num1 + num2 = {result}")

    subtract_strategy = SubtractStrategy()
    context = Context(subtract_strategy)
    result = context.execute_strategy(num1, num2)
    print(f"num1 - num2 = {result}")

    multiply_strategy = MultiplyStrategy()
    context = Context(multiply_strategy)
    result = context.execute_strategy(num1, num2)
    print(f"num1 * num2 = {result}")

在上述代码中,我们定义了一个 Strategy 接口,该接口包含了一个 do_operation 方法,用于执行算法。然后,我们分别定义了加法、减法和乘法三种算法,并且让它们都实现 Strategy 接口。

接下来,我们定义了一个 Context 类作为策略的上下文,它接受一个具体的策略对象,并在执行 execute_strategy 方法时调用该策略对象的 do_operation 方法。

最后,在主程序中,我们分别使用加法、减法和乘法三种策略来执行一些数学运算,并输出运算结果。文章来源地址https://www.toymoban.com/news/detail-401999.html

到了这里,关于【python设计模式】13、策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式——策略模式

    定义: 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把便用算法的责任和算法的实现分割开来,并委派给不算法进象行管理。 主要角色如下: 示例: 假定现在需要

    2024年02月22日
    浏览(31)
  • 设计模式:策略模式

    策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时根据不同的情况选择不同的算法或行为。策略模式通过将算法封装成独立的策略类,使得它们可以互相替换,而不影响客户端的使用。 在策略模式中,有三个核心组件: 策略接口(Strategy Interface):定义了策

    2024年02月07日
    浏览(33)
  • 《设计模式》策略模式

    定义 : 又叫作 政策模式,将定义的一系列算法封装起来,使得它们之间可以互相替换,从而让算法的变化不影响到使用算法的用户 。 属于 行为型 模式。 策略模式的组成角色 : 环境类(Context) : 环境类是使用算法的角色 ,用来操作策略的上下文环境,屏蔽高层模块(客户

    2024年02月01日
    浏览(36)
  • 【设计模式】 策略模式

    策略模式 (Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让客户端代码和算法的具体实现解耦。这样,客户端可以根据不同的需求选择不同的算法,而无需修改原有的代码。 灵活性增强 :策略模式使得算法独立于

    2024年02月14日
    浏览(36)
  • 设计模式-策略模式

    策略模式是一种行为型设计模式,它允许在运行时动态改变对象的行为。在策略模式中,算法被封装在独立的策略类中,使得它们可以互换使用。下面是一个简单的例子: 假设我们有一个计算税收的系统,现在需要计算不同类型的商品的税收,例如书籍、食品和服装。每种商

    2024年02月15日
    浏览(37)
  • 设计模式之策略模式

    策略设计模式(Strategy Pattern)是一种行为设计模式,它允许在运行时选择算法的行为。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。这种模式使算法的变化独立于使用算法的客户端。 概念 在策略模式中,有以下几个关键组成部分: 策略接口(

    2024年01月23日
    浏览(35)
  • 设计模式—策略模式

    目录 一、定义 二、特点 三、优点 四、缺点 五、实例 六.涉及到的知识点 1、一个类里面有哪些东西? 2、类和实例 什么是类? 什么是实例? 什么是实例化? 3、字段和属性 什么是字段? 属性是什么? 属性怎么用呢? 属性有什么作用? 静态属性是什么? 属性和字段的公有

    2024年02月10日
    浏览(39)
  • 设计模式--策略模式

    目录 一.场景 1.1场景 2.2 何时使用  2.3个人理解 二. 业务场景练习  2.1业务: 2.2具体实现 2.3思路   三.总结 3.1策略模式的特点:  3.2策略模式优点 3.3策略模式缺点 1.1场景 许多相关的类仅仅是行为有异,也就是说业务代码需要根据场景不同,切换不同的实现逻辑 一个类定义了

    2024年02月13日
    浏览(31)
  • 设计模式(13):模板方法模式

    实现一个功能时,整体步骤很固定,但是,某些部分易变。易变部分可以抽象出来,供子类实现。 非常繁琐,各个框架,类库中都有它的影子,比如常见的有: 数据库访问的封装 Junit单元测试 servlet中关于doGet/doPost方法调用 spring框架中各种Template shire中权限认证和授权都用到

    2024年04月16日
    浏览(33)
  • js设计模式:策略模式

    根据不同的条件去进行相应的业务逻辑处理 就好比针对每种情况都制定对应的方案,触发条件就启动某项方案策略

    2024年02月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包