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 相关文章推荐
在Django中创建第一个静态视图
Jul 15 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
浅谈Python 中整型对象的存储问题
May 16 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python实现在IDLE中输入多行的方法
Apr 19 Python
Python魔法方法详解
Feb 13 Python
20行python代码的入门级小游戏的详解
May 05 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
PHP版自动生成文章摘要
2008/07/23 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
php生成rss类用法实例
2015/04/14 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
Python中类的继承代码实例
2014/10/28 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
python库matplotlib绘制坐标图
2019/10/18 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
python 命名规范知识点汇总
2020/02/14 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
全球工业:Global Industrial
2020/02/01 全球购物
大二自我鉴定
2014/01/31 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
2014年科研工作总结
2014/12/03 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
导游词之桂林
2019/08/20 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
MongoDB数据库的安装步骤
2021/06/18 MongoDB
Pygame Time时间控制的具体使用详解
2021/11/17 Python