Python设计模式之原型模式实例详解


Posted in Python onJanuary 18, 2019

本文实例讲述了Python设计模式之原型模式。分享给大家供大家参考,具体如下:

原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

一个原型模式的简单demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——原型模式
原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
原型模式是用场景:需要大量的基于某个基础原型进行微量修改而得到新原型时使用
"""
from copy import copy, deepcopy
# 原型抽象类
class Prototype(object):
  def clone(self):
    pass
  def deep_clone(self):
    pass
# 工作经历类
class WorkExperience(object):
  def __init__(self):
    self.timearea = ''
    self.company = ''
  def set_workexperience(self,timearea, company):
    self.timearea = timearea
    self.company = company
# 简历类  
class Resume(Prototype):
  def __init__(self,name):
    self.name = name
    self.workexperience = WorkExperience()
  def set_personinfo(self,sex,age):
    self.sex = sex
    self.age = age
    pass
  def set_workexperience(self,timearea, company):
    self.workexperience.set_workexperience(timearea, company)
  def display(self):
    print self.name
    print self.sex, self.age
    print '工作经历',self.workexperience.timearea, self.workexperience.company
  def clone(self):
    return copy(self)
  def deep_clone(self):
    return deepcopy(self)
if __name__ == '__main__':
  obj1 = Resume('andy')
  obj2 = obj1.clone() # 浅拷贝对象
  obj3 = obj1.deep_clone() # 深拷贝对象
  obj1.set_personinfo('男',28)
  obj1.set_workexperience('2010-2015','AA')
  obj2.set_personinfo('男',27)
  obj2.set_workexperience('2011-2017','AA') # 修改浅拷贝的对象工作经历
  obj3.set_personinfo('男',29)
  obj3.set_workexperience('2016-2017','AA') # 修改深拷贝的对象的工作经历
  obj1.display()
  obj2.display()
  obj3.display()

运行结果:

andy
男 28
工作经历 2011-2017 AA
andy
男 27
工作经历 2011-2017 AA
andy
男 29
工作经历 2016-2017 AA

上面类的设计如下图:

Python设计模式之原型模式实例详解

简历类Resume继承抽象原型的clone和deepclone方法,实现对简历类的复制,并且简历类引用工作经历类,可以在复制简历类的同时修改局部属性

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python算法之栈(stack)的实现
Aug 18 Python
python中函数传参详解
Jul 03 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python实现的config文件读写功能示例
Sep 24 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
python函数定义和调用过程详解
Feb 09 Python
python可视化text()函数使用详解
Feb 11 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
Python map及filter函数使用方法解析
Aug 06 Python
python 决策树算法的实现
Oct 09 Python
Django restful framework生成API文档过程详解
Nov 12 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
Pycharm 设置默认头的图文教程
Jan 17 #Python
You might like
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
php笔记之常用文件操作
2010/10/12 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
JS与框架页的操作代码
2010/01/17 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
用pickle存储Python的原生对象方法
2017/04/28 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
委托证明的格式
2014/01/10 职场文书
辛亥革命观后感
2015/06/02 职场文书
《穷人》教学反思
2016/02/19 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript