设计模式四:原型模式
什么是原型模式
创建某个时间点对原有对象的一个完全副本。
使用场景
重新创建原有对象没有意义时,
一个对象过于复杂不适合重新创建时,
希望对对象的某些部分变更但又希望保持原有对象不变时,
此时可以使用原型模式。
典型案例
复制一张图片,在复制出的图片上做修改,这样不会影响原图片,也可以得要修改后的图片。
实例代码
#原型模式必备
import copy
from collections import OrderedDict
class Manual:
def __init__(self,name,authors,date,**arg):
self.name = name
self.authors = authors
self.date = date
self.__dict__.update(arg)
def __str__(self):
lists = []
ordered = OrderedDict(sorted(self.__dict__.items()))
for index in ordered.keys():
lists.append('{} : {}'.format(index,ordered[index]))
lists.append('\n')
return ''.join(lists)
class Prototype:
def __init__(self,obj):
self.objects = obj
def clone(self,**attr):
clone_obj = copy.deepcopy(self.objects)
clone_obj.__dict__.update(attr)
return clone_obj
def main():
m = Manual('Motion_Manipulater','shaye','2010-12-29',edition = 1,page = 30)
prototype = Prototype(m)
m2 = prototype.clone(edition = 2,page = 40,date = '2011-1-1',authors = 'kitty',
remarke = 'Add some function')
for i in(m,m2):
print(i)
if __name__ == "__main__":
main()