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 相关文章推荐
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Django进阶之CSRF的解决
Aug 01 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
Flask-WTF表单的使用方法
Jul 12 Python
python同时替换多个字符串方法示例
Sep 17 Python
python判断两个序列的成员是否一样的实例代码
Mar 01 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python安装后的目录在哪里
Jun 21 Python
Python 如何测试文件是否存在
Jul 31 Python
python3字符串输出常见面试题总结
Dec 01 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
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php简单防盗链实现方法
2015/07/29 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PHP chr()函数讲解
2019/02/11 PHP
javascript 短路法代码精简
2009/08/20 Javascript
获取body标签的两种方法
2011/10/13 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python制作图片缩略图
2019/04/30 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python中logging日志库实例详解
2020/02/19 Python
Python 绘制可视化折线图
2020/07/22 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
某公司Java工程师面试题笔试题
2016/03/27 面试题
上海微创软件面试题
2012/06/14 面试题
销售文员的岗位职责
2013/11/20 职场文书
清扬洗发水广告词
2014/03/14 职场文书
2014年调度员工作总结
2014/11/19 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
详解Java实践之适配器模式
2021/06/18 Java/Android