原型模式是一种创建型设计模式, 用于创建重复的对象,同时又能保证性能。
使一个原型实例指定了要创建的对象的种类,并且通过拷贝这个原型来创建新的对象。
主要解决了对象的创建与复制过程中的性能问题。主要针对:复杂对象和相识对象的创建
在某些情况下,直接使用new
关键字或者其他方式创建对象可能会导致性能损耗较大,特别是当对象的创建过程比较复杂或者耗时时。
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- __doc__ = """
- 原型模式
- 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- 例:通过原型实例克隆多个人的对象,并更新其属性
- """
-
- import copy
-
-
- class Prototype:
- def __init__(self):
- self._objs = {}
-
- def register_object(self, key, obj):
- self._objs[key] = obj
-
- def unregister_object(self, key):
- del self._objs[key]
-
- def clone(self, key, **attrs):
- obj = copy.deepcopy(self._objs[key])
- obj.__dict__.update(attrs)
- return obj
-
-
- class People:
- def __init__(self, name: str, age: int):
- self.name = name
- self.age = age
-
- def __str__(self):
- return f"{self.__dict__}"
-
-
- if __name__ == '__main__':
- """
- Original: {'name': '张三', 'age': 20}
- Clone: {'name': '李四', 'age': 24}
- """
- # 创建原型对象
- prototype = Prototype()
- # 创建一个 People 实例并注册为原型对象
- people = People(name="张三", age=20)
- prototype.register_object("people", people)
- # 克隆一个 People 实例
- people_clone = prototype.clone("people", name="李四", age=24)
-
- # 输出原型对象和克隆对象
- print("Original:", people)
- print("Clone:", people_clone)