• 【Python笔记-设计模式】原型模式


    一、说明

    原型模式是一种创建型设计模式, 用于创建重复的对象,同时又能保证性能。

    使一个原型实例指定了要创建的对象的种类,并且通过拷贝这个原型来创建新的对象。

    (一) 解决问题

    主要解决了对象的创建与复制过程中的性能问题。主要针对:复杂对象相识对象的创建

    在某些情况下,直接使用new关键字或者其他方式创建对象可能会导致性能损耗较大,特别是当对象的创建过程比较复杂或者耗时时。

    (二) 使用场景

    • 类初始化时需要消耗大量资源,如数据、硬件资源等。通过原型拷贝可以避免这些消耗,提高资源利用率。
    • 创建对象时需要繁琐的数据准备或访问权限。原型模式可以简化对象的创建过程,提高性能。
    • 一个对象需要提供给其他对象访问,并且各个调用者可能需要修改其值。通过保护性拷贝,可以创建多个对象供调用者使用,同时保持原对象的状态不变。

    二、结构

    1. 原型(Prototype):接口将对克隆方法进行声明。在绝大多数情况下,其中只会有一个名为clone克隆的方法。
    2. 具体原型(Concrete Prototype):类将实现克隆方法。除了将原始对象的数据复制到克隆体中之外,该方法有时还需处理克隆过程中的极端情况,例如克隆关联对象和梳理递归依赖等等。
    3. 客户端(Client):可以复制实现了原型接口的任何对象。

    三、伪代码

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. __doc__ = """
    4. 原型模式
    5. 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
    6. 例:通过原型实例克隆多个人的对象,并更新其属性
    7. """
    8. import copy
    9. class Prototype:
    10. def __init__(self):
    11. self._objs = {}
    12. def register_object(self, key, obj):
    13. self._objs[key] = obj
    14. def unregister_object(self, key):
    15. del self._objs[key]
    16. def clone(self, key, **attrs):
    17. obj = copy.deepcopy(self._objs[key])
    18. obj.__dict__.update(attrs)
    19. return obj
    20. class People:
    21. def __init__(self, name: str, age: int):
    22. self.name = name
    23. self.age = age
    24. def __str__(self):
    25. return f"{self.__dict__}"
    26. if __name__ == '__main__':
    27. """
    28. Original: {'name': '张三', 'age': 20}
    29. Clone: {'name': '李四', 'age': 24}
    30. """
    31. # 创建原型对象
    32. prototype = Prototype()
    33. # 创建一个 People 实例并注册为原型对象
    34. people = People(name="张三", age=20)
    35. prototype.register_object("people", people)
    36. # 克隆一个 People 实例
    37. people_clone = prototype.clone("people", name="李四", age=24)
    38. # 输出原型对象和克隆对象
    39. print("Original:", people)
    40. print("Clone:", people_clone)

    四、优缺点

    优点

    • 性能提升:通过复用已有对象,避免了重复的对象创建和初始化过程,从而提高了性能。
    • 简化创建过程:客户端代码无需知道对象创建的细节,只需要调用克隆方法即可。

    缺点

    • 复杂度增加:需要实现克隆方法
    • 深拷贝和浅拷贝问题:在实现克隆方法时,需要考虑深拷贝和浅拷贝的问题。浅拷贝只复制对象本身和其中的基本数据类型,而深拷贝会复制对象及其引用的所有对象。如果处理不当,可能会导致对象之间的意外关联或修改。

     跳转主页:【Python笔记】设计模式-CSDN博客

  • 相关阅读:
    DIV布局个人介绍网页模板代码 家乡海阳个人简介网页制作 简单个人静态HTML网页设计作品 DW个人网站制作成品 web网页制作与实现...
    阿里云专利缴费小程序丨如何在一分钟为多项专利缴费?
    vue3笔记
    算法|每日一题|同积元组|哈希统计
    2022暑假牛客多校1 (A/G/D/I)
    Python Selenium 之数据驱动测试的实现!
    掌动智能云网络流量分析的重要性
    智慧公厕:科技赋予公共卫生新生命,提升城市管理品质
    Android-Framework 时间格式默认使用24小时制、时区为上海
    基于Springboot的数据库初始化工具
  • 原文地址:https://blog.csdn.net/weixin_44904331/article/details/136169702