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语言中的按位运算符
Nov 26 Python
django富文本编辑器的实现示例
Apr 10 Python
python中的句柄操作的方法示例
Jun 20 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Python如何计算语句执行时间
Nov 22 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
浅析Python中的套接字编程
Jun 22 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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
Dedecms常用函数解析
2008/02/01 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
利用json获取字符出现次数的代码
2012/03/22 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python callable()函数用法实例分析
2018/03/17 Python
Python封装原理与实现方法详解
2018/08/28 Python
python实现图片识别汽车功能
2018/11/30 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
python 绘制场景热力图的示例
2020/09/23 Python
pandas针对excel处理的实现
2021/01/15 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
污水厂厂长岗位职责
2014/01/04 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书