Python设计模式之简单工厂模式实例详解


Posted in Python onJanuary 22, 2019

本文实例讲述了Python设计模式之简单工厂模式。分享给大家供大家参考,具体如下:

简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.

下面使用简单工厂模式实现一个简单的四则运算

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
'''
大话设计模式
用任意一种面向对象语言实现一个计算器控制台程序。要求输入两个数和运算符号,得到结果
设计模式——简单工厂模式
简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
'''
class Operation(object):
  '''
  四则运算的父类,接收用户输入的数值
  '''
  def __init__(self, number1=0, number2=0):
    self.num1 = number1
    self.num2 = number2
  def GetResult(self):
    pass
  pass
#加法运算类
class OperationAdd(Operation):
  def GetResult(self):
    return self.num1 + self.num2
#减法运算类
class OperationSub(Operation):
  def GetResult(self):
    return self.num1 - self.num2
#乘法运算类
class OperationMul(Operation):
  def GetResult(self):
    return self.num1 * self.num2
#除法运算类
class OperationDiv(Operation):
  def GetResult(self):
    if self.num2 == 0:
      return '除数不能为0 '
    return 1.0*self.num1 / self.num2
#其他操作符类
class OperationUndef(Operation):
  def GetResult(self):
    return '操作符错误'
#简单工厂类
class OperationFactory(object):
  def choose_oper(self,ch):
    if ch == '+':
      return OperationAdd()
    elif ch == '-':
      return OperationSub()
    elif ch == '*':
      return OperationMul()
    elif ch == '/':
      return OperationDiv()
    else:
      return OperationUndef()
if __name__ == "__main__":
  ch = ''
  while not ch == 'q':
    num1 = input('请输入第一个数值: ')
    oper = str(raw_input('请输入一个四则运算符: '))
    num2 = input('请输入第二个数值: ')
    # Operation(num1,num2)
    OF = OperationFactory()
    oper_obj = OF.choose_oper(oper)
    oper_obj.num1 = num1
    oper_obj.num2 = num2
    print '运算结果为: ',oper_obj.GetResult()

运行结果:

 请输入第一个数值:  51
请输入一个四则运算符:  -
请输入第二个数值:  15
运算结果为:  36

这几个类的结构图如下:

Python设计模式之简单工厂模式实例详解

专门定义一个Operation类作为父类,加减乘除运算类继承Operation类,OperationFactory类用来决定什么时候创建对应的类

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python新手实现2048小游戏
Mar 31 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
Python实现网站表单提交和模板
Jan 15 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
人工神经网络算法知识点总结
Jun 11 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
Python常用编译器原理及特点解析
Mar 23 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 Python
详解Python中的文件操作
Jan 14 Python
Python实现粒子群算法的示例
Feb 14 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 Python
对python字典过滤条件的实例详解
Jan 22 #Python
python实现淘宝秒杀脚本
Jun 23 #Python
python实现网页自动签到功能
Jan 21 #Python
python实现桌面壁纸切换功能
Jan 21 #Python
在Python中通过getattr获取对象引用的方法
Jan 21 #Python
python实现windows壁纸定期更换功能
Jan 21 #Python
PyQt5+requests实现车票查询工具
Jan 21 #Python
You might like
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP n个不重复的随机数生成代码
2009/06/23 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python程序中设置HTTP代理
2016/11/06 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
python时间time模块处理大全
2020/10/25 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
实体的生命周期
2013/08/31 面试题
2014年物业公司工作总结
2014/11/22 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏