欢迎来到代码驿站!

Python代码

当前位置:首页 > 软件编程 > Python代码

Python设计模式中的行为型策略模式

时间:2023-02-11 09:49:27|栏目:Python代码|点击:

一、策略模式

策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换。这意味着,让一个类的行为(算法)可以在类的实例化对象运行时进行更改。

优点:

  • 定义了一系列可重用的算法和行为。
  • 消除了一些条件语句。
  • 可以提供相同行为的不同实现。

缺点:

  • Client 必须了解不同的策略行为细节。

二、应用场景

根据不同的客户属性,采用不同的折扣策略来计算订单中的商品价格:

  • 有 1000 或以上积分的客户,每个订单享 5% 折扣。
  • 同一订单中,单个商品的数量达到 20 个或以上,享 10% 折扣。
  • 订单中的不同商品达到 10 个或以上,享 7% 折扣。

三、代码示例

实体角色:

  • 上下文(Context):集成了算法的类。
  • 抽象策略(Strategy):实现不同算法的组件的共同接口。
  • 具体策略(Concrete Strategy):抽象策略的具体子类。
import abc

# 抽象策略
class Strategy(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def execute(self, data):
        pass

# 具体策略 1
class Strategy1(Strategy):
    def execute(self, data):
        print(f"使用策略1执行{data}")

# 具体策略2 
class Strategy2(Strategy):
    def execute(self, data):
        print(f"使用策略2执行{data}")

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

    def set_strategy(self, strategy):
        self.strategy = strategy

    def do_strategy(self):
        if self.strategy:
            self.strategy.execute(self.data)
        else:
            print("请先配置策略!")


if __name__ == "__main__":
    data = "测试数据"
    s1 = Strategy1()
    s2 = Strategy2()
    context = Context(data)
    context.set_strategy(s1)
    context.do_strategy()
    context.set_strategy(s2)
    context.do_strategy()

上一篇:pycharm编写spark程序,导入pyspark包的3中实现方法

栏    目:Python代码

下一篇:详解Python函数式编程之装饰器

本文标题:Python设计模式中的行为型策略模式

本文地址:http://www.codeinn.net/misctech/225542.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有