Python设计模式之工厂方法模式实例详解


Posted in Python onJanuary 18, 2019

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

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——工厂方法模式
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类.
工厂方法模式克服了简单工厂模式违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点
场景:雷锋工厂,不关心执行者,只关心执行结果
"""
class LeiFeng(object):
  def Sweep(self):
    print "扫地"
  def Wash(self):
    print "洗衣"
  def BuyRice(self):
    print "买米"
class IFactory(LeiFeng):
  def CreateLeiFeng(self):
    pass
#大学生
class Undergraduate(LeiFeng):
  pass
#新增社区服务者
class Volunteer(LeiFeng):
  pass
# 学习雷锋的大学生工厂
class UndergraduateFactory(IFactory):
  def CreateLeiFeng(self):
    return Undergraduate()
#新增一个社区服务者的工厂e
class VolunteerFactory(IFactory):
  def CreateLeiFeng(self):
    return Volunteer()
if __name__ == "__main__":
  student = UndergraduateFactory()
  volunteer = VolunteerFactory()
  student.BuyRice()
  student.Sweep()
  volunteer.Wash()

运行结果:

买米
扫地
洗衣

上面类的设计如下图:

Python设计模式之工厂方法模式实例详解

创建一个抽象工厂类CreateLeiFeng和一个抽象对象类LeiFeng,当创建具体leifeng对象-Undergradiate去dosomething时,使用继承抽象工厂的UndergraduateFactory工厂类,该类返回一个Undergradiate实例,如果还要去做另一个dosomething时,再创建一个VolunteerFactory工厂方法创建创建一个Volunteer实例就可以了

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

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

Python 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
使用Python对MySQL数据操作
Apr 06 Python
python3实现基于用户的协同过滤
May 31 Python
详解python3中的真值测试
Aug 13 Python
Python 获取div标签中的文字实例
Dec 20 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
在ipython notebook中使用argparse方式
Apr 20 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
python安装第三方库如xlrd的方法
Oct 31 Python
python中subplot大小的设置步骤
Jun 28 Python
Python设计模式之原型模式实例详解
Jan 18 #Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 #Python
Python中logging实例讲解
Jan 17 #Python
python矩阵/字典实现最短路径算法
Jan 17 #Python
python实现Dijkstra静态寻路算法
Jan 17 #Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 #Python
python实现dijkstra最短路由算法
Jan 17 #Python
You might like
第八节--访问方式
2006/11/16 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
Symfony的安装和配置方法
2016/03/17 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
ant design实现圈选功能
2019/12/17 Javascript
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
Python中的 enum 模块源码详析
2019/01/09 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
YUV转为jpg图像的实现
2019/12/09 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
十佳青年个人事迹材料
2014/01/28 职场文书
医疗纠纷协议书
2014/04/16 职场文书
先进单位事迹材料
2014/12/25 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
Django实现翻页的示例代码
2021/05/24 Python
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
 Python 中 logging 模块使用详情
2022/03/03 Python