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实现二分法算法实例
Feb 02 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python错误处理操作示例
Jul 18 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
python实现手机推送 代码也就10行左右
Apr 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php explode函数实例代码
2012/02/27 PHP
PHP制作用户注册系统
2015/10/23 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
js实现简易计算器功能
2019/10/18 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
用python 制作图片转pdf工具
2015/01/30 Python
浅谈Python中的闭包
2015/07/08 Python
Python 爬虫的工具列表大全
2016/01/31 Python
python抓取网页中链接的静态图片
2018/01/29 Python
TensorFlow实现创建分类器
2018/02/06 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
主持人演讲稿
2014/05/13 职场文书
建筑管理专业求职信
2014/07/28 职场文书
财产分割协议书范本
2014/11/03 职场文书
高三语文教学反思
2016/02/16 职场文书