文档章节

大话设计模式之Python实现【策略模式】

smile_zjw
 smile_zjw
发布于 2015/07/18 15:18
字数 288
阅读 56
收藏 0
# coding=utf8

__author__ = 'smilezjw'


class CashSuper(object):
    def accept_cash(self, money):
        pass


class CashNormal(CashSuper):
    def accept_cash(self, money):
        return money


class CashRebate(CashSuper):
    discount = 1
    def __init__(self, discount):
        self.discount = discount

    def accept_cash(self, money):
        return money * self.discount


class CashReturn(CashSuper):
    total = 0
    ret = 0
    def __init__(self, total, ret):
        self.total = total
        self.ret = ret

    def accept_cash(self, money):
        if money > self.total:
            return money - self.ret
        return money


class CashContext(object):
    cs = None
    def __init__(self, type):
        if type == 1:
            cs0 = CashNormal()
            self.cs = cs0
        elif type == 2:
            cs1 = CashReturn(300, 100)
            self.cs = cs1
        elif type == 3:
            cs2 = CashRebate(0.8)
            self.cs = cs2

    def get_result(self, money):
        return self.cs.accept_cash(money)

if __name__ == '__main__':
    money = input('Total momey: ')
    type = input('1-正常收费, 2-满300减100, 3-打8折: ')
    context = CashContext(type)
    print context.get_result(money)

策略模式和简单工厂模式相结合。

模式特点:策略模式使得客户端只需要认识一个类CashContext即可,而采用简单工厂模式则需要认识两个类CashSuper和CashFactory。策略模式使得耦合度降低。


© 著作权归作者所有

smile_zjw

smile_zjw

粉丝 16
博文 15
码字总数 19787
作品 0
浦东
程序员
私信 提问
python 与设计模式 ——工厂与单例

python 与设计模式 源码地址:[http://git.oschina.net/duoduo3_69/python_design_pattern][1] git checkout v001(这个版本与此篇博客相符) zarkpy里面运用了很多设计模式,以前一直很费解p...

duoduo3_69
2013/11/27
874
0
写代码也有“套路”-谈谈设计模式

编程教室开了这么久,已经有很多人从完全零基础的小白成为了会写代码的菜鸟程序员,能够自己独立开发程序。不过到此阶段,常常会遇到瓶颈,感觉功能可以实现,但代码看起来有些别扭: 代码中...

crossin
02/22
52
0
《 Head First 》学习笔记:策略模式 (python实现)

学习<head first>,书中是用java 来实现,我用python比较多,所以在这里记下 用python实现的方法 。 书中策略模式的定义 : 策略模式 : 策略模式定义了算法族,分别封装起来,让它们之间可以...

Jbryan
2013/06/13
920
0
每天一个设计模式之订阅-发布模式

博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用(靠这吃饭)和(纯粹喜欢)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :)...

godbmw
2018/12/10
0
0
设计模式之工厂模式学习

与简单工厂模式相比,工厂模式为每个类增加了一个工厂类。每个工厂类返回它所对应的类的对象指针。 简单工厂模式的最大优点:工厂类中包含了必要的逻辑判断。根据客户端的选择条件动态的实例...

长平狐
2012/10/08
83
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部