开发者

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

开发者 https://www.devze.com 2022-12-11 09:24 出处:网络 作者: 范桂飓
目录一、策略模式二、应用场景三、代码示例一、策略模式 策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换。这意味着,让一个类的行为(算法)可以在类的实例
目录
  • 一、策略模式
  • 二、应用场景
  • 三、代码示例

一、策略模式

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

优点:

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

缺点:

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

二、应用场景

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

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

三、代码示例

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

实体角编程客栈色:

  • 上下文(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 __i编程客栈nit__(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()
  contexhttp://www.cppcns.comt.set_strategy(s2)
  context.do_strategy()

到此这篇关于python设计模式中的行为型策略模式的文章就介绍到这了,更多相关Python策略模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号