Python设计模式-原型模式(Prototype)
原型模式(Prototype)
目的:
原型模式用于减少一个项目所需的类的数量。
对于许多差异较小的子类,原型模式通过复制一个"原型实例"并做少量修改,来替代声明多个子类。
应用场景:
当新的实例更容易通过一个旧实例衍生出来,并且对这些实例的类定义会很复杂时,可以使用原型模式。
优点:
原型模式用于创建复杂的或者耗时的实例:复制一个已经存在的实例使程序运行更高效。且对于工厂模式,原型模式减少了子类的构建。
缺点:
每一个产品类都必须配置一个克隆方法,并且这个克隆方法需要对类的功能进行整体考虑。
示例
class Prototype:
def __init__(self, value: str = "default", **attrs: Any) -> None:
self.value = value
self.__dict__.update(attrs)
def clone(self, **attrs: Any) -> Prototype:
"""Clone a prototype and update inner attributes dictionary"""
# Python in Practice, Mark Summerfield
# copy.deepcopy can be used instead of next line.
obj = self.__class__(**self.__dict__)
obj.__dict__.update(attrs)
return obj
class PrototypeDispatcher:
def __init__(self):
self._objects = {}
def get_objects(self) -> dict[str, Prototype]:
"""Get all objects"""
return self._objects
def register_object(self, name: str, obj: Prototype) -> None:
"""Register an object"""
self._objects[name] = obj
def unregister_object(self, name: str) -> None:
"""Unregister an object"""
del self._objects[name]
if __name__ == '__main__':
# 初始化一个原型
my_prototype = Prototype(value="test")
# 完全复制my_prototype的属性
obj1 = my_prototype.clone()
# 继承my_prototype并增加修改一些属性
obj2 = my_prototype.clone(vlaue='test2')
# 继承obj2 并增加修改一些属性
obj3 = obj2.clone(value='test3', is_checked=True)
# PrototypeDispatcher更像是一个管理者,管理所有的原型对象
dispatcher = PrototypeDispatcher()
dispatcher.register_object('object1', obj1)
dispatcher.register_object('object2', obj2)
dispatcher.register_object('object3', obj3)
for n, p in dispatcher.get_objects().items():
print({n: p.value})
ref
https://blog.csdn.net/weixin_41754309/article/details/115303161
本文来自博客园,作者:坦先生的AI资料室,转载请注明原文链接:https://www.cnblogs.com/yushengchn/p/16478397.html
分类:
python设计模式系列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南