Python设计模式之工厂模式简单示例


Posted in Python onJanuary 09, 2018

本文实例讲述了Python设计模式之工厂模式。分享给大家供大家参考,具体如下:

工厂模式是一个在软件开发中用来创建对象的设计模式。

工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。

为了实现此方法,需要创建一个工厂类创建并返回。

当程序运行输入一个“类型”的时候,需要创建于此相应的对象。这就用到了工厂模式。在如此情形中,实现代码基于工厂模式,可以达到可扩展,可维护的代码。当增加一个新的类型,不在需要修改已存在的类,只增加能够产生新类型的子类。

简短的说,当以下情形可以使用工厂模式:

1.不知道用户想要创建什么样的对象
2.当你想要创建一个可扩展的关联在创建类与支持创建对象的类之间。

一个例子更能很好的理解以上的内容:

① 我们有一个基类Person ,包涵获取名字,性别的方法 。有两个子类male 和female,可以打招呼。还有一个工厂类。
② 工厂类有一个方法名getPerson有两个输入参数,名字和性别。
③ 用户使用工厂类,通过调用getPerson方法。

在程序运行期间,用户传递性别给工厂,工厂创建一个与性别有关的对象。因此工厂类在运行期,决定了哪个对象应该被创建。

class Person:
  def __init__(self):
    self.name = None
    self.gender = None
  def getName(self):
    return self.name
  def getGender(self):
    return self.gender
class Male(Person):
  def __init__(self, name):
    print "Hello Mr." + name
class Female(Person):
  def __init__(self, name):
    print "Hello Miss." + name
class Factory:
  def getPerson(self, name, gender):
    if gender == 'M':
      return Male(name)
    if gender == 'F':
      return Female(name)
if __name__ == '__main__':
  factory = Factory()
  person = factory.getPerson("Chetan", "M")

运行结果:

Python设计模式之工厂模式简单示例

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python处理json数据中的中文
Mar 06 Python
初步理解Python进程的信号通讯
Apr 09 Python
浅谈python迭代器
Nov 08 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
python小程序实现刷票功能详解
Jul 17 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
python科学计算之narray对象用法
Nov 25 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
手把手教你将Flask应用封装成Docker服务的实现
Aug 19 Python
python套接字socket通信
Apr 01 Python
浅谈numpy库的常用基本操作方法
Jan 09 #Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 #Python
浅谈Python2获取中文文件名的编码问题
Jan 09 #Python
在CentOS6上安装Python2.7的解决方法
Jan 09 #Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 #Python
用tensorflow实现弹性网络回归算法
Jan 09 #Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 #Python
You might like
BBS(php & mysql)完整版(三)
2006/10/09 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python运算符重载用法实例
2015/05/28 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
用Python设计一个经典小游戏
2017/05/15 Python
python Flask实现restful api service
2017/12/04 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
python实现学生通讯录管理系统
2021/02/25 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
什么是servlet
2012/05/08 面试题
实现中国梦思想汇报2014
2014/09/13 职场文书
2015年计划生育责任书
2015/05/08 职场文书
初中语文教学反思范文
2016/03/03 职场文书
vue代码分块和懒加载非必要资源文件
2022/04/11 Vue.js