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中字典dict常用操作方法实例总结
Apr 04 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
python最长回文串算法
Jun 04 Python
Python Django 命名空间模式的实现
Aug 09 Python
详解如何减少python内存的消耗
Aug 09 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
Pytorch中的数据集划分&正则化方法
May 27 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递归调用的小技巧讲解
2013/02/19 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
python读取中文txt文本的方法
2018/04/12 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
abstract class和interface有什么区别?
2012/01/03 面试题
如何进行Linux分区优化
2016/09/13 面试题
幼儿园大班开学教师寄语
2014/04/03 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
竞选部长演讲稿
2014/04/26 职场文书
禁止酒驾标语
2014/06/25 职场文书
单位工作证明范文
2014/09/14 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
高三生物教学反思
2016/02/22 职场文书
员工工作心得体会
2019/05/07 职场文书
深入浅析Django MTV模式
2021/09/04 Python