策略模式

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。简而言之,策略模式就是根据不同的策略,选择对应不同的算法。

例如下面的示例,根据不同的国家,计算对应缴纳的税款。

TAX_PERCENT = .12

class TaxIN(object):
    def __init__(self,):
        self.country_code = "IN"

    def __call__(self, billamount):
        return billamount * TAX_PERCENT


class TaxUS(object):
    def __init__(self,):
        self.country_code = "US"

    def __call__(self,billamount):
        if billamount < 500:
            return billamount * (TAX_PERCENT//2)
        else:
            return billamount * TAX_PERCENT


class TaxCalculator(object):
    def __init__(self):
        self._impls = [TaxIN(),TaxUS()]

    def __call__(self, country, billamount):
        """select the strategy based on country parameter"""
        for impl in self._impls:
            if impl.country_code == country:
                return impl(billamount)
        else:
            return None

tax_cal = TaxCalculator()
print(tax_cal("IN", 400), tax_cal("IN", 700))
print(tax_cal("US", 400), tax_cal("US", 700))

输出结果如下:

(48.0, 84.0)
(0.0, 84.0)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏媒矿工厂

超高清内容生产中的视频编码技术

通过逐步引入宽色域(WCG)、高动态范围(HDR)、更高的分辨率和更高的帧率(HFR)等用以改善视频消费者观看体验的新特性,Ultra-HD(UHD-1)预计将...

49840
来自专栏PaddlePaddle

宠物也刷脸,如何最快长成这个技能树?

然而令人吃惊的是,在 LA Hacks 2018 的活动之中,来自加州理工学院的美籍华裔大二学生 EricZhao做出“狗脸识别”系统,16小时让梦成真!

13030
来自专栏技术随笔

医疗CT影像肺结节检测参考项目(附论文)

71480
来自专栏WOLFRAM

Korteweg-de Vries 方程的可视化

23730
来自专栏专知

【20180511】专知AI干货资料推荐,论文、代码、教程等

40220
来自专栏WOLFRAM

打造自动化数据科学家:新的分类和预测函数

11230
来自专栏数值分析与有限元编程

有限元知识 | 剪切锁死、体积锁死

一.剪切锁死(shear locking) 简单地说就是在理论上没有剪切变形的单元中发生了剪切变形。该剪切变形也常称伴生剪切( parasitic shear)...

36970
来自专栏随心DevOps

号称「永远不会输钱」的马丁格尔策略

点进来,说明你想赢,那我们直入主题。 ---- 所谓「马丁格尔(Martingale)策略」是在某个赌盘里,当每次「输钱」时就以 2 的倍数再增加赌金,直到赢钱...

582100
来自专栏机器学习人工学weekly

机器学习人工学weekly-2018/7/22

链接:https://cn.udacity.com/course/self-driving-car-fundamentals-featuring-apollo-...

7910
来自专栏计算机视觉战队

深度Q网络用语视觉格斗类游戏

最近,基于视觉深度Q的学习在雅达利和视觉Doom AI平台被证明成功的结果。与以前的研究不同,格斗游戏假设两个玩家有相当多的动作,在这项研究中,采用深度Q网络(...

32950

扫码关注云+社区

领取腾讯云代金券