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使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Python常用算法学习基础教程
Apr 13 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python实践项目之监控当前联网状态详情
May 23 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
python中取绝对值简单方法总结
Jul 24 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
python必学知识之文件操作(建议收藏)
May 30 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笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
python迭代器与生成器详解
2016/03/10 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
Python学习入门之区块链详解
2017/07/25 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
致跳远运动员广播稿
2014/02/11 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
校园安全教育心得体会
2016/01/15 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang