简述
原型模式也可以称为复制模式,是在创造对象的时候使用。比如有这样一个场景,我们已经有了一个罐装椰奶对象,如果现在只想更换一下包装,换成盒装,那么我们就可以使用原型模式。
- 复制一个罐装对象
- 将复制的对象中的,罐装属性换成盒装属性
也就是说复制以后的对象和之前的对象有公有的属性,还要有差异的属性。
实践一下
import logging
import copy
logging.basicConfig(level=logging.INFO)
class CoconutMilk:
"""
椰奶对象
"""
def __init__(self, wrap, volume):
# 包装
self.wrap = wrap
# 容积
self.volume = volume
def product(self):
result = f"你的椰奶是 包装:{self.wrap} 容积:{self.volume}L"
logging.info(result)
return result
class CmCloneTool:
"""
拷贝工具
"""
def __init__(self):
self.objs = {}
def register(self, sign, obj):
self.objs[sign] = obj
def un_register(self, sign):
del self.objs[sign]
def clones(self, sign, **attrs):
found = self.objs.get(sign)
if not found:
logging.error("你要拷贝的对象不存在")
return
c_found = copy.deepcopy(found)
for part in attrs:
value = attrs[part]
logging.info(f"重置属性=> {part}-{value}")
# setattr(c_found, part, value)
c_found.wrap = attrs[part]
return c_found
if __name__ == "__main__":
# 铁罐
iron_cm_obj = CoconutMilk(wrap="iron", volume=200)
iron_cm_obj.product()
# 创建复制对象
cm_tool = CmCloneTool()
cm_tool.register("iron", iron_cm_obj)
# 纸盒椰奶
paper_cm_obj = cm_tool.clones("iron", warp="paper")
paper_cm_obj.product()