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函数嵌套实例
Sep 23 Python
Python contextlib模块使用示例
Feb 18 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
Python变量和字符串详解
Apr 29 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Python的缺点和劣势分析
Nov 19 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
python实现简单反弹球游戏
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
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
python多重继承实例
2014/10/11 Python
处理Python中的URLError异常的方法
2015/04/30 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
医院护士的求职信范文
2013/12/26 职场文书
党员个人承诺书
2015/04/27 职场文书
汽车销售员工作总结
2015/08/12 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis