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实现的一个简单LRU cache
Sep 26 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python科学计算之NumPy入门教程
Jan 15 Python
Python中模块与包有相同名字的处理方法
May 05 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python简单生成随机数的方法示例
Mar 31 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
python中xlrd模块的使用详解
Feb 01 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
php.ini 配置文件的深入解析
2013/06/17 PHP
浅析PHP文件下载原理
2014/12/25 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
canvas的神奇用法
2017/02/03 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
JS Input里添加小图标的两种方法
2017/11/11 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
python提示No module named images的解决方法
2014/09/29 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python下载网络小说实例代码
2018/02/03 Python
python 获取字符串MD5值方法
2018/05/29 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
财务学生的职业生涯发展
2014/02/11 职场文书
出国留学经济担保书
2014/04/01 职场文书
业务内勤岗位职责
2014/04/30 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
论文答谢词
2015/01/20 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
MSSQL基本语法操作
2022/04/11 SQL Server