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之list和str比较
Sep 20 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
谈谈如何手动释放Python的内存
Dec 17 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
python+selenium实现自动化百度搜索关键词
Jun 03 Python
Puppeteer使用示例详解
Jun 20 Python
Django Rest framework三种分页方式详解
Jul 26 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python脚本定时发送邮件
Dec 22 Python
Python基础之元编程知识总结
May 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
php字符集转换
2017/01/23 PHP
js活用事件触发对象动作
2008/08/10 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
python实现的简单抽奖系统实例
2015/05/22 Python
python正则表达式之作业计算器
2016/03/18 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python发展史及网络爬虫
2019/06/19 Python
python之yield和Generator深入解析
2019/09/18 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
优秀企业获奖感言
2014/02/01 职场文书
同学会主持词
2014/03/18 职场文书
新郎答谢词
2015/01/04 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android