Python之简单工厂模式实现
最近又看了下大话设计模式,决定用Python来试着实现下。
基础类
class OperationBase():
"""
基础运算类
"""
result = 0
def GetResult(self):
return self.result
继承类
class OperationAdd(OperationBase):
"""
加法类,继承基础运算类
"""
def __init__(self,numA,numB):
self.result = numA + numB
def GetResult(self):
return self.result class OperationSub(OperationBase):
"""
减法运算类,继承基础运算类
"""
def __init__(self,numA,numB):
self.result = numA - numB
def GetResult(self):
return self.result class OperationMult(OperationBase):
"""
乘法运算类,继承基础运算类
"""
def __init__(self,numA,numB):
self.result = numA * numB
def GetResult(self):
return self.result class OperationDiv(OperationBase):
"""
除法运算类,继承基础运算类,通过被除数为0异常捕获控制被除数不能为0
"""
def __init__(self,numA,numB):
try:
self.result = numA / numB
except ZeroDivisionError:
print "除数不能为0!!!" def GetResult(self):
return self.result #工厂类
class OperationFactor():
@staticmethod
def createOperate(operate,numA,numB):
for case in switch(operate):
if case('+'):
oper = OperationAdd(numA,numB)
break
if case('-'):
oper = OperationSub(numA,numB)
break
if case('*'):
oper = OperationMult(numA,numB)
break
if case('/'):
oper = OperationDiv(numA,numB)
break
return oper if __name__ == '__main__':
opt = raw_input("请输入一个运算操作符(+-*/):")
try:
numA = float(raw_input("请输入第一个运算的数字:"))
numB = float(raw_input("请输入第二个运算的数字:"))
except ValueError:
print "输入数字不对,请重新输入!"
numA = float(raw_input("请输入第一个运算的数字:"))
numB = float(raw_input("请输入第二个运算的数字:")) oper = OperationFactor.createOperate(opt,float(numA),float(numB))
print "Result = ",oper.GetResult()
里面的case可以参考我另外一篇博客
http://www.cnblogs.com/ListenWind/p/4267517.html
Python之简单工厂模式实现的更多相关文章
- python实现简单工厂模式
python实现简单工厂模式 模式定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工 ...
- Python 设计模式--简单工厂模式
简单工厂模式(Factory Pattern)是一种创建型的设计模式,像工厂一样根据要求生产对象实例. 特点:根据不同的条件,工厂实例化出合适的对象. <大话设计模式>中实例:四则运算计算 ...
- 大话设计模式Python实现-简单工厂模式
简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 #!/usr/ ...
- [python实现设计模式]-3.简单工厂模式-触宝开放平台
预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open ...
- [Python设计模式] 第1章 计算器——简单工厂模式
github地址:https://github.com/cheesezh/python_design_patterns 写在前面的话 """ 读书的时候上过<设计模 ...
- python设计模式 之 简单工厂模式
简单工厂模式属于类的创建型模式,适合用来对大量具有共同接口的类进行实例化,它能够推迟到执行的时候才动态决定要创建哪个类的实例.而不是在编译时就必须知道要实例化哪个类. python: #!/usr/b ...
- 《大话设计模式》——简单工厂模式(Python版)
简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 例: 使用Python设计一个控制台计算器,要求输入两个数 ...
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
- python 简单工厂模式
abc 是抽象类模块abc.ABC 是继承抽象类 也可直接继承 (metaclass=ABCMeta)abc.abstractmethod 是定义抽象方法 简单工厂模式:通过接口创建对象,但不会暴露 ...
随机推荐
- ural 1207 Median on the Plane
极角排序 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath& ...
- Skipped Rebuild All: Project with VS2008
This Problem is getting me head around it in these days. BUt , i have solve it: Description of Probl ...
- 【转】Java多线程操作局部变量与全局变量
原文网址:http://blog.csdn.net/undoner/article/details/12849661 在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控 ...
- Map的遍历方法及String和其它类型的相互转化
Map的遍历方法: package com.lky.test; import java.util.HashMap; import java.util.Iterator; import java.uti ...
- javascript实现限制上传文件的大小
目录 基本思路 示例 [一].基本思路 在FireFox.Chrome浏览器中可以根据document.getElementById(“id_file”).files[0].size 获取上传文件的大 ...
- [MySQL CPU]线上飙升800%,load达到12的解决过程
接到报警通知,负载过高,达到800%,load也过高,有11了. MySQL版本号为5.6.12-log 1 top 之后,确实是mysqld进程占领了全部资源. 2 查看error日志,无不论什么异 ...
- StringBuffer和StringBuilder使用方法比較
StringBuffer是字符串缓冲区,是一个容器. 特点: 1,长度是可变化的. 2,能够字节操作多个数据类型. 3,终于会通过toString方法变成字符串. C create U update ...
- 挂载(mount)深入理解
首先引用一句 wiki 上的定义来开篇: Mounting takes place before a computer can use any kind of storage device (such ...
- Java基础知识强化35:String类之String的其他功能
1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...
- DELL RACADM 工具使用介绍
如果iDRAC的IP或者设置出现问题,不能够链接,那么可以通过RACADM这个程序在系统层面可以对iDRAC进行设置,使用的方法以及命令都在下边. RACADM provides command li ...