文档章节

python设计模式(一)--简单工厂(上)

极光火狐狸
 极光火狐狸
发布于 2016/05/10 14:23
字数 325
阅读 74
收藏 1

最近正在持续更新源码库,代码都是参考大话设计模式翻成python版,完整代码片段请到github上去下载.

https://github.com/zhengtong0898/python-patterns

参考:

    书籍<<大话设计模式>> 第一章

 

Python 3.x

# -.- coding:utf-8 -.-
# __author__ = 'zhengtong'
# 简单工厂实现
# 知识点:
#       1. 继承(类后面加上基类Operation)
#       2. 多态(每个子类都出现的get_result)
# 编码过程:
#       1. 当出现新的需求时,可以通过新增一个类来完成.
#       2. 将新的类加入到工厂类的operators字典表中.


class Operation:

    """运算类"""

    def __init__(self, x, y):
        self.x = int(x)
        self.y = int(y)

    def get_result(self):
        raise NotImplementedError


class Add(Operation):

    """加法类"""

    def get_result(self):
        return self.x + self.y


class Subtract(Operation):

    """减法类"""

    def get_result(self):
        return self.x - self.y


class Multiply(Operation):

    """乘法类"""

    def get_result(self):
        return self.x * self.y


class Divide(Operation):

    """除法类"""

    def get_result(self):
        if self.y == 0:
            raise ZeroDivisionError("除数不能为0!")
        return self.x / self.y


class SimpleFactory:

    """简单工厂"""

    @staticmethod
    def create_operate(operator, x, y):
        operators = {'+': Add, '-': Subtract, '*': Multiply, '/': Divide}
        if operator not in operators:
            raise KeyError('无效的操作符')
        return operators.get(operator)(x, y).get_result()


def main():
    """
    界面交互逻辑函数
    """
    x = int(input('请输入数字A:'))
    operator = input('请输入运算符号(+、-、*、/):')
    y = int(input('请输入数字B:'))

    return SimpleFactory.create_operate(operator, x, y)


if __name__ == '__main__':
    print(main())

 

© 著作权归作者所有

共有 人打赏支持
极光火狐狸
粉丝 11
博文 29
码字总数 14739
作品 0
普陀
python 与设计模式 ——工厂与单例

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

duoduo3_69
2013/11/27
0
0
模式设计-----抽象工厂模式

抽象工厂模式(Abstract Factory)属于创建型工厂模式的一种。 特点:客户仅与抽象类定义的接口交互,而不使用特定的具体类的接口。 这里是一个python的例子,运行环境是python 2.7 import r...

小毛驴VS
2015/05/05
0
0
python 与设计模式 ——工厂与装饰者

python 与设计模式第二篇 添加了test.py,里面的单元测试有使用的方法。 源码地址:[http://git.oschina.net/duoduo3_69/python_design_pattern][1] git checkout v002(这个版本与此篇博客相符...

duoduo3_69
2013/11/27
0
1
《 Head First 》学习笔记:策略模式 (python实现)

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

Jbryan
2013/06/13
0
0
《大话设计模式》Python版代码实现

 上一周把《大话设计模式》看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多、偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界。《大话设计模式》的代码使用C#写成的,...

若虚道人
2014/08/14
0
2

没有更多内容

加载失败,请刷新页面

加载更多

xilinx资源

本系列教学视频由赛灵思高级战略应用工程师带领你:从零开始,一步步深入 掌握 HLS 以及 UltraFAST 设计方法,帮助您成为系统设计和算法加速的大拿! http://www.eetrend.com/topics/2018-0...

whoisliang
3分钟前
0
0
=====BJmeter性能测试小接=====

一、性能测试分类 1、负载测试: 通过逐步加压的方法,达到既定的性能阈值的目标,阈值的设定应是小于某个值,如cpu使用率小于等于80% 2、压力测试: 通过逐步加压的方法,使得系统的某些资源...

覃光林
6分钟前
0
0
企业级开源四层负载均衡解决方案--LVS

网盘链接 企业级开源四层负载均衡解决方案--LVS 本课程将在Linux环境下,学习配置使用LVS,对Web集群和MySQL集群进行负载均衡,并结合利用Keepalived实现负载均衡器的高可用,实现对后端Rea...

qq__2304636824
12分钟前
0
0
Windows上安装Spacemacs

emacs安装 下载地址emacs 安装比较简单,解压后执行\bin\addpm.exe即可 emacs配置 emacs的默认配置文件路径和.emacs.d文件夹都是在Windows主目录下的 C:\Users\Administrator\AppData\Roami...

yxmsw2007
27分钟前
0
0
OSChina 周一乱弹 —— 鱼生不值得

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念:分享新裤子的单曲《没有理想的人不伤心 (Remix版)》: 《没有理想的人不伤心 (Remix版)》- 新裤子 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
171
9

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部