设计模式之python版(六)--原型模式

原型模式:

应用特性:需要大量的基于某个基础原型进行微量修改而得到新原型时使用。

结构特性:对象的复制机制【浅复制和深复制】

UML:

#!/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应用,python技巧)