原型模式:
原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式本质就是克隆对象,所以在对象初始化操作比较复杂的情况下,很实用,能大大降低耗时,提高性能,因为“不用重新初始化对象,而是动态地获得对象运行时的状态”。
应用特性:
需要大量的基于某个基础原型进行微量修改而得到新原型时使用。
结构特性:
对象的复制机制,即浅复制和深复制。
例1:
#!/usr/bin/env python #encoding: utf-8 from copy import copy, deepcopy class test_obj: def __init__(self, id): self.id = id class proto_type: def __init__(self, name, id): self.name = name self.obj = test_obj(id) def display(self): print self.name print self.obj.id def clone(self): return copy(self) def deep_clone(self): return deepcopy(self) if '__main__' == __name__: obj1 = proto_type('name1', 1) obj2 = obj1.clone() obj3 = obj1.deep_clone() obj2.name = 'name2' obj2.obj.id = 2 obj3.name = 'name3' obj3.obj.id = 3 obj1.display() obj2.display() obj3.display() print obj1.__class__ print obj2.__class__ print obj3.__class__
结果:
name1 2 #因为obj2是浅复制,所以对象没有被复制,导致新对象的修改影响了原来的就对象的值 name2 2 name3 3 #因为是深复制,所以不会影响之前的旧对象 __main__.proto_type __main__.proto_type __main__.proto_type
这里我们再来回顾一下Python编程基础中关于浅拷贝和深拷贝的知识点:
浅拷贝(Shallow Copy):
指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝的对象和源对象只是名称相同,但是他们共用一个实体。
深拷贝(deep copy):
对对象实例中字段引用的对象也进行拷贝。
好了,基于以上,我们再来看一个例子:
例2:
#encoding=utf-8 # #by panda #原型模式 import copy def printInfo(info): print unicode(info, 'utf-8').encode('gbk') #拷贝接口 class ICloneable: def shallowClone(self): return copy.copy(self) def deepClone(self): return copy.deepcopy(self) #工作经历 class WorkExperience(ICloneable): workData = "" company = "" pass #简历 class Resume(ICloneable): name = "" sex = '未知' age = 0 work = None def __init__(self, name, work = WorkExperience()): self.name = name self.work = work; def setPersonInfo(self, sex, age): self.sex = sex self.age = age def setWorkExperience(self, workData, company): self.work.workData = workData self.work.company = company def display(self): printInfo('%s, %s, %d' % (self.name,self.sex,self.age)) printInfo('%s, %s' % (self.work.workData, self.work.company)) def clientUI(): a = Resume('大鸟') a.setPersonInfo('男',29) a.setWorkExperience("1998-2000","XX公司") #浅拷贝 b = a.shallowClone() b.setWorkExperience("2000-2006","YY公司") #深拷贝 c = a.deepClone() c.setWorkExperience("2006-2009","ZZ公司") b.display() a.display() c.display() return if __name__ == '__main__': clientUI();

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver Mac version
Visual web development tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download
The most popular open source editor

Notepad++7.3.1
Easy-to-use and free code editor
