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中的json的基本使用方法
Dec 21 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Python 从相对路径下import的方法
Dec 04 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
python tkinter实现屏保程序
Jul 30 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
详解python 中in 的 用法
Dec 12 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
通过实例解析python创建进程常用方法
Jun 19 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 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
神族 PROTOSS 概述
2020/03/14 星际争霸
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JavaScript实现信用卡校验方法
2015/04/07 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python中文字符串截取问题
2015/06/15 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
pandas 空数据处理方法详解
2019/11/02 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
python opencv肤色检测的实现示例
2020/12/21 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
升国旗演讲稿
2014/09/05 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书