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版
Dec 07 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
Python表示矩阵的方法分析
May 26 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
python之pexpect实现自动交互的例子
Jul 25 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
Python对wav文件的重采样实例
Feb 25 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
Python之基础函数案例详解
Aug 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 is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
FCK调用方法..
2006/12/21 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
vue实现信息管理系统
2020/05/30 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python中map、any、all函数用法分析
2015/04/21 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python ldap实现登录实例代码
2016/09/30 Python
pandas 层次化索引的实现方法
2019/07/06 Python
django中forms组件的使用与注意
2019/07/08 Python
电信专业应届生自荐信
2013/09/28 职场文书
总裁助理岗位职责
2014/02/17 职场文书
大学新生军训方案
2014/05/03 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
银行员工考核评语
2014/12/31 职场文书
婚礼父母答谢词
2015/01/04 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
深入理解Vue的数据响应式
2021/05/15 Vue.js
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js