文档章节

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

极光火狐狸
 极光火狐狸
发布于 2016/05/10 14:23
字数 325
阅读 75
收藏 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
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

转载:原地址http://www.cnblogs.com/zhangchenliang/p/3700820.html 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 结合简单示例和UML图,讲解工厂模式简单原理。 一、引子 话说...

法斗斗
05/08
0
0
编程中的那些套路——关于工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 前面我们写了简单工厂模式,《编程中的那些套路——关于简单工厂模式》,但简单工厂模式有一些不足(违反...

gzchen
08/27
0
0
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

React和Redux的连接react-redux

通过Redux文档来了解react-redux,在一段时间的实践后准备翻一翻源代码,顺便做些相关的总结。我看的代码的npm版本为v4.0.0,也就是说使用的React版本是0.14.x。 react-redux提供两个关键模块...

前端攻城老湿
22分钟前
0
0
1、Mybatis连接池Context.xml配置

注意: (1)mybatis 3.2 之前 通过 set get 方法 获取相关属性。之后通过属性姓名获取相关关联。 (2)mybatis 映射 优先为 sql 语句中的别名与实体类的属性进行映射。 (3)jndi Java用于调...

KingFightingAn
38分钟前
0
0
Android 界面漩涡扭曲动效实现

背景:之前偶然看到优酷有类似的页面切换动画效果。于是自己也打算来实现下这样的效果。 动效说明:点击界面中的任意位置,界面以点击位置作为中心点,开始以漩涡状态,扭曲,收缩。直到消失...

Carlyle_Lee
48分钟前
2
0
聊聊我怎么系统学习Linux技能并快速提高的

聊聊我怎么系统学习Linux技能并快速提高的 随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能。而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱...

linuxCool
今天
4
0
Android/Java 获取一个byte[]的真实编码,用于解决乱码问题

来源地址:https://blog.csdn.net/qq_31384551/article/details/81627840 一个byte数组,byte[] buf,是由一个字符串转换来的,如何判断字符串使用的是什么编码? Mozilla的一个组件提供了相应...

她叫我小渝
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部