python simple factory mode example
Two python simple factory mode examples shown in this section. One is for base operation and another is for json and xml file handling.
1. Base operation script shown as following:
# -*- coding: utf-8 -*-
"""
OperationFactory.py
This is a simple python3 factory mode example for operation
Created on Thu Sep 20 14:53:22 2018
"""
__author__="lyp" class Operation:
def __init__(self,Num1,Num2):
self.Num1=Num1
self.Num2=Num2 class OperationAdd(Operation):
def __init__(self,Num1,Num2):
Operation.__init__(self,Num1,Num2)
def result(self):
return(self.Num1+self.Num2) class OperationSub(Operation):
def __init__(self,Num1,Num2):
Operation.__init__(self,Num1,Num2)
def result(self):
return(self.Num1-self.Num2) class OperationMul(Operation):
def __init__(self,Num1,Num2):
Operation.__init__(self,Num1,Num2)
def result(self):
return(self.Num1*self.Num2) class OperationDiv(Operation):
def __init__(self,Num1,Num2):
Operation.__init__(self,Num1,Num2)
def result(self):
if self.Num2==0:
raise ValueError("Num2 can't be 0!!!")
else:
return(self.Num1/self.Num2) class OperationFactory:
def __init__(self):
pass
def create_operation(self,string_operate):
self.string_operate=string_operate
if self.string_operate=="+":
return(OperationAdd)
elif self.string_operate=="-":
return(OperationSub)
elif self.string_operate=="*":
return(OperationMul)
elif self.string_operate=="/":
return(OperationDiv)
else:
raise ValueError("Operator Error!!!") def main():
Add=OperationFactory().create_operation("+")
value=Add(1.0,2).result()
print("Add value is: {}".format(value))
Sub=OperationFactory().create_operation("-")
value=Sub(1.0,2).result()
print("Sub value is: {}".format(value))
Mul=OperationFactory().create_operation("*")
value=Mul(1.0,2).result()
print("Mul value is: {}".format(value))
Div=OperationFactory().create_operation("/")
value=Div(1.0,2).result()
print("Div value is: {}".format(value)) if __name__=="__main__":
main()
result as below:
Add value is: 3.0
Sub value is: -1.0
Mul value is: 2.0
Div value is: 0.5

Fig1.UML picture for OperationFactory.py
2. Connector factory script shown as following:
# -*- coding: utf-8 -*-
"""
ConnectorFactory.py
"""
__author__="lyp"
import json
import xml.etree.ElementTree as etree
import os
class jsonconnector:
def __init__(self,filepath):
self.data=[]
with open(filepath,mode='r',encoding='utf-8') as f:
self.data=json.load(f) def parsed_data(self):
return self.data class xmlconnector:
def __init__(self,filepath):
self.tree=etree.parse(filepath) def parsed_data(self):
return self.tree def connector_factory(filepath):
if filepath.endswith('json'):
connector=jsonconnector
elif filepath.endswith('xml'):
connector=xmlconnector
else:
raise ValueError('Cannot connect to {}'.format(filepath))
return connector(filepath) def connect_to(filepath):
factory=None
try:
factory=connector_factory(filepath)
except ValueError as ve:
print(ve)
return factory def main():
sql_factory=connect_to(os.getcwd()+os.sep+"sqlexample.sql")
print(sql_factory) json_factory=connect_to(os.getcwd()+os.sep+"jsonexample.json")
print(json_factory)
json_data=json_factory.parsed_data()
print('found: {} donuts'.format(len(json_data)))
for donuts in json_data:
print('name: {}'.format(donuts['name']))
print('price: ${}'.format(donuts['ppu']))
[print('topping: {} {}'.format(t['id'], t['type'])) for t in donuts['topping']] xml_factory=connect_to(os.getcwd()+os.sep+"xmlexample.xml")
print(xml_factory)
xml_data = xml_factory.parsed_data()
liars = xml_data.findall(".//{}[{}='{}']".format('person','lastName', 'Liar'))
print('found: {} persons'.format(len(liars)))
for liar in liars:
print('first name: {}'.format(liar.find('firstName').text))
print('last name: {}'.format(liar.find('lastName').text))
[print('phone number ({})'.format(p.attrib['type']),p.text) for p in liar.find('phoneNumbers')]
if __name__=="__main__":
main()
result as below(Note that sql_factory in main is test for exception handling):
Cannot connect to C:\Users\sling\Desktop\factory\sqlexample.sql
None
<__main__.jsonconnector object at 0x000000000E4DB9B0>
found: 3 donuts
name: Cake
price: $0.55
topping: 5001 None
topping: 5002 Glazed
topping: 5005 Sugar
topping: 5007 Powdered Sugar
topping: 5006 Chocolate with Sprinkles
topping: 5003 Chocolate
topping: 5004 Maple
name: Raised
price: $0.55
topping: 5001 None
topping: 5002 Glazed
topping: 5005 Sugar
topping: 5003 Chocolate
topping: 5004 Maple
name: Old Fashioned
price: $0.55
topping: 5001 None
topping: 5002 Glazed
topping: 5003 Chocolate
topping: 5004 Maple
<__main__.xmlconnector object at 0x000000000E4DB748>
found: 2 persons
first name: Jimy
last name: Liar
phone number (home) 212 555-1234
first name: Patty
last name: Liar
phone number (home) 212 555-1234
phone number (mobile) 001 452-8819
3. json file content (jsonexample.json)
[
{
"id": "",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
"batters": {
"batter": [
{
"id": "",
"type": "Regular"
},
{
"id": "",
"type": "Chocolate"
},
{
"id": "",
"type": "Blueberry"
},
{
"id": "",
"type": "Devil's Food"
}
]
},
"topping": [
{
"id": "",
"type": "None"
},
{
"id": "",
"type": "Glazed"
},
{
"id": "",
"type": "Sugar"
},
{
"id": "",
"type": "Powdered Sugar"
},
{
"id": "",
"type": "Chocolate with Sprinkles"
},
{
"id": "",
"type": "Chocolate"
},
{
"id": "",
"type": "Maple"
}
]
},
{
"id": "",
"type": "donut",
"name": "Raised",
"ppu": 0.55,
"batters": {
"batter": [
{
"id": "",
"type": "Regular"
}
]
},
"topping": [
{
"id": "",
"type": "None"
},
{
"id": "",
"type": "Glazed"
},
{
"id": "",
"type": "Sugar"
},
{
"id": "",
"type": "Chocolate"
},
{
"id": "",
"type": "Maple"
}
]
},
{
"id": "",
"type": "donut",
"name": "Old Fashioned",
"ppu": 0.55,
"batters": {
"batter": [
{
"id": "",
"type": "Regular"
},
{
"id": "",
"type": "Chocolate"
}
]
},
"topping": [
{
"id": "",
"type": "None"
},
{
"id": "",
"type": "Glazed"
},
{
"id": "",
"type": "Chocolate"
},
{
"id": "",
"type": "Maple"
}
]
}
]
3. xml file content (xmlexample.xml)
<persons>
<person>
<firstName>John</firstName>
<lastName>Smith</lastName>
<age>25</age>
<address>
<streetAddress>21 2nd Street</streetAddress>
<city>New York</city>
<state>NY</state>
<postalCode>10021</postalCode>
</address>
<phoneNumbers>
<phoneNumber type="home">212 555-1234</phoneNumber>
<phoneNumber type="fax">646 555-4567</phoneNumber>
</phoneNumbers>
<gender>
<type>male</type>
</gender>
</person>
<person>
<firstName>Jimy</firstName>
<lastName>Liar</lastName>
<age>19</age>
<address>
<streetAddress>18 2nd Street</streetAddress>
<city>New York</city>
<state>NY</state>
<postalCode>10021</postalCode>
</address>
<phoneNumbers>
<phoneNumber type="home">212 555-1234</phoneNumber>
</phoneNumbers>
<gender>
<type>male</type>
</gender>
</person>
<person>
<firstName>Patty</firstName>
<lastName>Liar</lastName>
<age>20</age>
<address>
<streetAddress>18 2nd Street</streetAddress>
<city>New York</city>
<state>NY</state>
<postalCode>10021</postalCode>
</address>
<phoneNumbers>
<phoneNumber type="home">212 555-1234</phoneNumber>
<phoneNumber type="mobile">001 452-8819</phoneNumber>
</phoneNumbers>
<gender>
<type>female</type>
</gender>
</person>
</persons>
python simple factory mode example的更多相关文章
- PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...
- 创建型模式(前引)简单工厂模式Simple Factory
一引出的原因(解决下面的问题) 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式. 在简单工厂模式 ...
- 深入浅出设计模式——简单工厂模式(Simple Factory)
介绍简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导,所以我想 ...
- 设计模式学习之简单工厂(Simple Factory,创建型模式)(1)
简单工厂(Simple Factory,创建型模式) 第一步: 比如我们要采集苹果和香蕉,那么我们需要创建一个Apple类和Banana类,里面各自有采集方法get(),然后通过main方法进行调用, ...
- 设计模式:简单工厂(Simple Factory)
定义:根据提供的数据或参数返回几种可能类中的一种. 示例:实现计算器功能,要求输入两个数和运算符号,得到结果. 结构图: HTML: <html xmlns="http://www.w ...
- Simple Factory vs. Factory Method vs. Abstract Factory【简单工厂,工厂方法以及抽象工厂的比较】
I ran into a question on stackoverflow the other day that sort of shocked me. It was a piece of code ...
随机推荐
- 浅谈MyBatis缓存
在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用 ...
- Day5 类和对象
面向对象编程OOP 类:相似对象的集合. 对象 对象:实体.一切可以被描述的事物. 属性:特征. 方法:动作,行为. 类和对象的区别 [1]类时抽象的,对象是具体的. [2]类是一个模板,创建出来的对 ...
- virtualbox+vagrant学习-2(command cli)-6-vagrant init命令
Init——创建Vagrantfile文件 格式: vagrant init [options] [name [url]] 通过创建初始的Vagrantfile文件(如果不存在的话),将当前目录初始化 ...
- spring-mybatis项目搭建(支持多数据源)
一.目录结构图 2.配置文件内容 db.properties: #oracle public oracle.driverClass=oracle.jdbc.driver.OracleDriver or ...
- layui弹出层之应用实例讲解
从酒店管理系统到智能门锁及其现在的资源共享平台,layui框架,我们团队用的比较多的就是这个layui弹出层. layui弹出层,除了页面iframe层我们比较常用还有就是表单校验和其他相关的友好提示 ...
- P2008 大朋友的数字
题目描述 有一批大朋友(年龄15岁以上),他们每人手上拿着一个数字,当然这个数字只有1位,也就是0到9之间.每个大朋友的分数为在他之前的最长不下降子序列中所有数之和.(这个序列必须以它作为结尾!)如有 ...
- asp.net core合并压缩资源文件(转载)
在asp.net core中使用BuildBundlerMinifier合并压缩资源文件 在asp.net mvc中可以使用Bundle来压缩合并css,js 不知道的见:http://www.cnb ...
- 使用java发送QQ邮件的总结
最近帮朋友做个网站,实现用邮箱订阅功能,所以现在把这个发送邮件的功能放在这里,算是这两天工作的总结吧! 首先,想要实现订阅功能,要把邮箱保存,但是这个做的是个小网站,前后台交互的太少了,所以我就直接保 ...
- #leetcode刷题之路48-旋转图像
给定一个 n × n 的二维矩阵表示一个图像.将图像顺时针旋转 90 度.说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像.示例 1:给定 matrix ...
- Disruptor时序调用
接下来,我会对disruptor的设计和源码上进行讲解,先来一篇时序图,简单理解下disruptor的工作过程