原型模式(python)

原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式本质就是克隆对象,所以在对象初始化操作比较复杂的情况下,很实用,能大大降低耗时,提高性能,因为“不用重新初始化对象,而是动态地获得对象运行时的状态”。

浅拷贝(Shallow Copy):指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝的对象和源对象只是名称相同,但是他们共用一个实体。
深拷贝(deep copy):对对象实例中字段引用的对象也进行拷贝。

 

 

[python]  view plain copy
  1. #encoding=utf-8  
  2. #  
  3. #by panda  
  4. #原型模式  
  5.   
  6. import copy  
  7.   
  8. def printInfo(info):  
  9.     print unicode(info, 'utf-8').encode('gbk')  
  10.   
  11. #拷贝接口  
  12. class ICloneable:  
  13.     def shallowClone(self):  
  14.         return copy.copy(self)  
  15.       
  16.     def deepClone(self):  
  17.         return copy.deepcopy(self)  
  18.   
  19. #工作经历  
  20. class WorkExperience(ICloneable):  
  21.     workData = ""  
  22.     company = ""  
  23.     pass  
  24.   
  25. #简历  
  26. class Resume(ICloneable):  
  27.     name = ""  
  28.     sex = '未知'  
  29.     age = 0  
  30.     work = None  
  31.       
  32.     def __init__(self, name, work = WorkExperience()):  
  33.         self.name = name  
  34.         self.work = work;  
  35.       
  36.     def setPersonInfo(self, sex, age):  
  37.         self.sex = sex  
  38.         self.age = age  
  39.       
  40.     def setWorkExperience(self, workData, company):  
  41.         self.work.workData = workData  
  42.         self.work.company = company      
  43.       
  44.     def display(self):  
  45.         printInfo('%s, %s, %d' % (self.name,self.sex,self.age))  
  46.         printInfo('%s, %s' % (self.work.workData, self.work.company))  
  47.   
  48. def clientUI():  
  49.     a = Resume('大鸟')  
  50.     a.setPersonInfo('男',29)  
  51.     a.setWorkExperience("1998-2000","XX公司")      
  52.       
  53.     #浅拷贝  
  54.     b = a.shallowClone()  
  55.     b.setWorkExperience("2000-2006","YY公司")          
  56.       
  57.     #深拷贝  
  58.     c = a.deepClone()  
  59.     c.setWorkExperience("2006-2009","ZZ公司")      
  60.       
  61.     b.display()  
  62.     a.display()   
  63.     c.display()      
  64.     return  
  65.   
  66. if __name__ == '__main__':  
  67.     clientUI();  


类图:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值