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 基础学习教程
Feb 08 Python
Python中的模块和包概念介绍
Apr 13 Python
Python实现按中文排序的方法示例
Apr 25 Python
python实现桌面托盘气泡提示
Jul 29 Python
pycharm配置git(图文教程)
Aug 16 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 Python
Python try except else使用详解
Jan 12 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 把数字转换成汉字的代码
2015/07/21 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
Django使用rest_framework写出API
2020/05/21 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
平面设计自荐信
2013/10/07 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
培训讲师邀请函
2014/01/10 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
个人租房协议书
2014/11/28 职场文书
大班下学期个人总结
2015/02/13 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
简短清晨问候语
2015/11/10 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang