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 10 Python
Python中字典的基础知识归纳小结
Aug 19 Python
Python冲顶大会 快来答题!
Jan 17 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
基于python实现名片管理系统
Nov 30 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
详解python中init方法和随机数方法
Mar 13 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
python web框架中实现原生分页
Sep 08 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 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
PHP下10件你也许并不了解的事情
2008/09/11 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Pytorch之保存读取模型实例
2019/12/30 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
婚庆公司的创业计划书
2014/01/22 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
保护环境建议书400字
2014/05/13 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
作弊检讨书范文
2015/05/06 职场文书
海底两万里读书笔记
2015/06/26 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
java executor包参数处理功能 
2022/02/15 Java/Android