Python设计模式-原型模式(Prototype)

原型模式(Prototype)

目的:
原型模式用于减少一个项目所需的类的数量。
对于许多差异较小的子类,原型模式通过复制一个"原型实例"并做少量修改,来替代声明多个子类。

应用场景:
当新的实例更容易通过一个旧实例衍生出来,并且对这些实例的类定义会很复杂时,可以使用原型模式。

优点:
原型模式用于创建复杂的或者耗时的实例:复制一个已经存在的实例使程序运行更高效。且对于工厂模式,原型模式减少了子类的构建。

缺点:
每一个产品类都必须配置一个克隆方法,并且这个克隆方法需要对类的功能进行整体考虑。

返回 Python设计模式-outline

示例

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

https://blog.csdn.net/hbu_pig/article/details/80511443

posted @   坦先生的AI资料室  阅读(241)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示