Python设计模式之策略模式

前言

设计模式是我们实际应用开发中必不可缺的,对设计模式的理解有助于我们写出可读性和扩展更高的应用程序。虽然设计模式与语言无关,但并不意味着每一个模式都能在任何语言中使用,所以有必要去针对语言的特性去做了解。设计模式特别是对于java语言而言,已经有过非常多的大牛写过,所以这里我就不重复了。对于Python来说就相对要少很多,特别是python语言具有很多高级的特性,而不需要了解这些照样能满足开发中的很多需求,所以很多人往往忽视了这些,这里我们来在Pythonic中来感受一下设计模式。

1.介绍

策略模式也是常见的设计模式之一,它是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
这是比较官方的说法,看着明显的一股比较抽象的感觉,通俗来讲就是针对一个问题而定义出一个解决的模板,这个模板就是具体的策略,每个策略都是按照这个模板来的。这种情况下我们有新的策略时就可以直接按照模板来写,而不会影响之前已经定义好的策略。

2.具体实例

这里我用的《流畅的Python》中的实例,刚好双11过去不久,相信许多小伙伴也是掏空了腰包,哈哈。那这里就以电商领域的根据客户的属性或订单中的商品数量来计算折扣的方式来进行讲解,首先来看看下面这张图。
电商大促销
通过这张图,相信能对策略模式的流程有个比较清晰的了解了。然后看看具体的实现过程,首先我们用namedtuple来定义一个Customer,虽然这里是说设计模式,考虑到有些小伙伴可能对Python中的具名元组不太熟悉,所以这里也简单的说下。
namedtuple用来构建一个带字段名的元组和一个有名字的类,这样说可能还是有些抽象,这里来看看下面的代码

from collections import namedtuple
City = namedtuple('City','name country provinces')

这里测试就直接如下

changsha = City('Changsha','China','Hunan')
print(changsha)

结果如下

City(name='Changsha', country='China', province='Hunan')

还可以直接调用字段名

print(changsha.name)

更多用法可以去看看官方文档,这里重点还是讲设计模式。
好了,先来看看用类实现的策略模式

# 策略设计模式实例

from abc import ABC, abstractmethod
from collections import namedtuple

# 创建一个具名元组
Customer = namedtuple('Customer', 'name fidelity')


class LineItem:

    def __init__(self, product, quantity, price):
        self.product = product
        self.quantity = quantity
        self.price = price

    def total(self):
        return self.price * self.quantity


# 上下文</
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值