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中获取对象信息的方法
Apr 27 Python
Python对文件操作知识汇总
May 15 Python
Python复数属性和方法运算操作示例
Jul 21 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
Python实现的端口扫描功能示例
Apr 08 Python
Selenium元素的常用操作方法分析
Aug 10 Python
python之super的使用小结
Aug 13 Python
Python实现使用request模块下载图片demo示例
May 24 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
python 实现性别识别
Nov 21 Python
利用python制作拼图小游戏的全过程
Dec 04 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
php绘制一条直线的方法
2015/01/24 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
代码生成器 document.write()
2007/04/15 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
JS变量及其作用域
2017/03/29 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
js JSON.stringify()基础详解
2019/06/19 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
Python如何使用函数做字典的值
2019/11/30 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
爱普生美国官网:Epson美国
2018/11/05 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
青涩记忆观后感
2015/06/18 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers