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 21 Python
python随机生成指定长度密码的方法
Apr 04 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
Python新手学习标准库模块命名
May 29 Python
django如何自定义manage.py管理命令
Apr 27 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源代码
2006/10/09 PHP
php xfocus防注入资料
2008/04/27 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
js form action动态修改方法
2008/11/04 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
javascript读写json示例
2014/04/11 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Django中的ajax请求
2018/10/19 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
如何教少儿学习Python编程
2020/07/10 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
餐厅执行经理岗位职责范本
2014/02/26 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
使用Pytorch训练two-head网络的操作
2021/05/28 Python
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL