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根据区号生成手机号码的方法
Jul 08 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
python验证码识别的示例代码
Sep 21 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
python 中的jieba分词库
Nov 23 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
默默简单的写了一个模板引擎
2007/01/02 PHP
php 日期时间处理函数小结
2009/12/18 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
Use Word to Search for Files
2007/06/15 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
用Python编写一个国际象棋AI程序
2014/11/28 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
python无序链表删除重复项的方法
2020/01/17 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
美国社交购物市场:MassGenie
2019/02/18 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
意向协议书范本
2014/04/23 职场文书
产品生产计划书
2014/05/07 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
python 实现体质指数BMI计算
2021/05/26 Python