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当中的数据类型和变量
Apr 25 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
Flask之请求钩子的实现
Dec 23 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
浅谈Python 递归算法指归
Aug 22 Python
Keras: model实现固定部分layer,训练部分layer操作
Jun 28 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
浅析Python的命名空间与作用域
Nov 25 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 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
javascript 运算数的求值顺序
2011/08/23 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
javascript常用的方法整理
2015/08/20 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
使用python统计文件行数示例分享
2014/02/21 Python
Python正则表达式完全指南
2017/05/25 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
机关财务管理制度
2014/01/17 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
企业计划生育责任书
2015/05/09 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js