原型模式:用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。
原型模式本質就是複製對象,所以在對象初始化操作比較複雜的情況下,很實用,能大大降低耗時,提高效能,因為“不用重新初始化對象,而是動態地獲得對象運行時的狀態”。
淺拷貝(Shallow Copy):指對象的欄位被拷貝,而欄位引用的對象不會被拷貝,拷貝的對象和來源物件只是名稱相同,但是他們共用一個實體。
深拷貝(deep copy):對對象執行個體中欄位引用的對象也進行拷貝。
#encoding=utf-8##by panda#原型模式import copydef 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() returnif __name__ == '__main__': clientUI();
類圖: