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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
python使用wxpython开发简单记事本的方法
May 20 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
使用python生成目录树
Mar 29 Python
浅谈python的dataframe与series的创建方法
Nov 12 Python
python数据归一化及三种方法详解
Aug 06 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 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
tp5递归 无限级分类详解
2019/10/18 PHP
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
python每次处理固定个数的字符的方法总结
2013/01/29 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python中set常用操作汇总
2016/06/30 Python
Python定时器实例代码
2017/11/01 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
python图片合成的示例
2020/11/09 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
《盘古开天地》教学反思
2014/02/28 职场文书
岗位明星事迹材料
2014/05/18 职场文书
2014年财政工作总结
2014/12/10 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
DIY胆机必读:各国电子管评价
2022/04/06 无线电