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自动安装pip
Apr 24 Python
python使用post提交数据到远程url的方法
Apr 29 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
Python 元类实例解析
Apr 04 Python
详解python中的模块及包导入
Aug 30 Python
基于Python实现签到脚本过程解析
Oct 25 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
python实现贪吃蛇双人大战
Apr 18 Python
深入浅析Python代码规范性检测
Jul 31 Python
Pycharm安装python库的方法
Nov 24 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简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
解析php中的escape函数
2013/06/29 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
Expandable "Detail" Table Rows
2007/08/29 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
JavaScript类库D
2010/10/24 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
在Django的模板中使用认证数据的方法
2015/07/23 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
J2EE中常用的名词进行解释
2015/11/09 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
捐书寄语赠言
2014/01/18 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
校运动会广播稿300字
2014/10/07 职场文书
先进工作者事迹材料
2014/12/23 职场文书
运动会加油稿30字
2015/07/21 职场文书
安全生产标语口号
2015/12/26 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
python使用glob检索文件的操作
2021/05/20 Python