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安装oracle扩展及数据库连接方法
Feb 21 Python
python版简单工厂模式
Oct 16 Python
Python3 replace()函数使用方法
Mar 19 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
Python FtpLib模块应用操作详解
Dec 12 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
新手学python应该下哪个版本
Jun 11 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
scrapy实践之翻页爬取的实现
Jan 05 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
服务器端解压缩zip的脚本
2006/12/22 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php中explode与split的区别介绍
2012/10/03 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
event.srcElement+表格应用
2006/08/29 Javascript
MSN消息提示类
2006/09/05 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
HEMA法国:荷兰原创设计
2019/02/21 全球购物
创业培训计划书
2014/05/03 职场文书
社会实践活动总结格式
2015/05/11 职场文书
工作经历证明范本
2015/06/15 职场文书
体育委员竞选稿
2015/11/21 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python