python模式 工厂模式原理及实例详解


Posted in Python onFebruary 11, 2020

这篇文章主要介绍了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中enumerate函数用法实例分析
May 20 Python
python处理二进制数据的方法
Jun 03 Python
Python之用户输入的实例
Jun 22 Python
python tornado微信开发入门代码
Aug 24 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
Python字节单位转换实例
Dec 05 Python
Python操作注册表详细步骤介绍
Feb 05 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
浅谈Python中threading join和setDaemon用法及区别说明
May 02 Python
python操作toml文件的示例代码
Nov 27 Python
Python3搭建http服务器的实现代码
Feb 11 #Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 #Python
python线程join方法原理解析
Feb 11 #Python
使用Python求解带约束的最优化问题详解
Feb 11 #Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 #Python
使用遗传算法求二元函数的最小值
Feb 11 #Python
Python for循环搭配else常见问题解决
Feb 11 #Python
You might like
PHP_MySQL教程-第一天
2007/03/18 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
yii的CURD操作实例详解
2014/12/04 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php代码架构的八点注意事项
2016/01/25 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
Python实现的简单排列组合算法示例
2018/07/04 Python
Python创建字典的八种方式
2019/02/27 Python
python图像处理入门(一)
2019/04/04 Python
解决python flask中config配置管理的问题
2019/07/26 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
澳大利亚在线购买葡萄酒:The Wine Collective
2020/02/20 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
师范生的个人求职信范文
2014/01/04 职场文书
我未来的职业规划范文
2014/01/11 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
小学生倡议书范文
2014/05/13 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
Django+Celery实现定时任务的示例
2021/06/23 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL