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解析xml成对应的html示例分享
Apr 02 Python
Python求出0~100以内的所有素数
Jan 23 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
实用自动化运维Python脚本分享
Jun 04 Python
python skimage 连通性区域检测方法
Jun 21 Python
Python列表生成式与生成器操作示例
Aug 01 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
对django views中 request, response的常用操作详解
Jul 17 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
python实现自动化群控的步骤
Apr 11 Python
详解Go语言运用广度优先搜索走迷宫
Jun 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
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
js实现蒙版效果
2020/01/11 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
python中requests和https使用简单示例
2018/01/18 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
MySQL一些常用高级SQL语句
2021/07/03 MySQL
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技