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 执行shell命令并将结果保存的实例
May 11 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
django 自定义过滤器的实现
Feb 26 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python 图像对比度增强的几种方法(小结)
Sep 25 Python
Python实现自定义读写分离代码实例
Nov 16 Python
python 实现绘制整齐的表格
Nov 18 Python
python 多进程队列数据处理详解
Dec 23 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php标签云的实现代码
2012/10/10 PHP
使用PHP导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
激活 ActiveX 控件
2006/10/09 Javascript
js身份证验证超强脚本
2008/10/26 Javascript
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
JavaScript函数详解
2014/11/17 Javascript
js数组的操作指南
2014/12/28 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
python 图片验证码代码分享
2012/07/04 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
助人为乐表扬信范文
2014/01/14 职场文书
打架检讨书300字
2014/02/02 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2014年教师工作总结
2014/11/10 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
事业单位岗位说明书
2015/10/08 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android