ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python计划模式详解之5 —— 原型模式 [打印本页]

作者: 瑞星    时间: 2024-12-1 00:56
标题: Python计划模式详解之5 —— 原型模式
Prototype 计划模式是一种创建型计划模式,它通过复制已有的实例来创建新对象,而不是通过重新实例化。这种模式非常适合对象的创建本钱较高大概需要制止复杂的构造过程时使用。Prototype 模式提供了一种通过克隆来快速创建对象的方式。
1. Prototype 模式简介

Prototype 模式通过界说一个接口来克隆自身,使得客户端代码可以通过复制原型来创建新对象。Python 中,Prototype 模式可以使用内置的 copy 模块来实现浅拷贝或深拷贝。
实用场景


2. Prototype 模式的结构

Prototype 模式通常包含以下角色:

3. Python 中的 Prototype 模式实现

在 Python 中,可以使用 copy 模块中的 copy() 和 deepcopy() 来实现浅拷贝和深拷贝。
示例:实现 Prototype 模式

  1. import copy
  2. # Prototype interface
  3. class Prototype:
  4.     def clone(self):
  5.         return copy.copy(self)  # 浅拷贝
  6.     def deep_clone(self):
  7.         return copy.deepcopy(self)  # 深拷贝
  8. # ConcretePrototype class
  9. class Car(Prototype):
  10.     def __init__(self, make, model, options=None):
  11.         self.make = make
  12.         self.model = model
  13.         self.options = options if options is not None else []
  14.     def __str__(self):
  15.         return f"Car(make={self.make}, model={self.model}, options={self.options})"
  16. # Client code
  17. car1 = Car("Tesla", "Model S", ["Sunroof", "Leather seats"])
  18. car2 = car1.clone()
  19. car3 = car1.deep_clone()
  20. # 修改 car2 的选项,不影响原始对象 car1
  21. car2.options.append("GPS")
  22. car3.options.append("Heated seats")
  23. print("Original Car:", car1)  # 输出: Car(make=Tesla, model=Model S, options=['Sunroof', 'Leather seats', 'GPS'])
  24. print("Shallow Cloned Car:", car2)  # 输出: Car(make=Tesla, model=Model S, options=['Sunroof', 'Leather seats', 'GPS'])
  25. print("Deep Cloned Car:", car3)  # 输出: Car(make=Tesla, model=Model S, options=['Sunroof', 'Leather seats', 'Heated seats'])
复制代码
4. 浅拷贝与深拷贝


区别示例:

  1. import copy
  2. list1 = [[1, 2, 3], [4, 5, 6]]
  3. shallow_copy = copy.copy(list1)
  4. deep_copy = copy.deepcopy(list1)
  5. # 修改 shallow_copy 的内部列表
  6. shallow_copy[0].append(100)
  7. print("Original List:", list1)  # 输出: [[1, 2, 3, 100], [4, 5, 6]]
  8. print("Shallow Copy:", shallow_copy)  # 输出: [[1, 2, 3, 100], [4, 5, 6]]
  9. print("Deep Copy:", deep_copy)  # 输出: [[1, 2, 3], [4, 5, 6]]
复制代码
5. Prototype 模式的优缺点

长处

缺点

6. 应用场景


示例:原型管理器

  1. class PrototypeManager:
  2.     def __init__(self):
  3.         self._prototypes = {}
  4.     def register_prototype(self, name, prototype):
  5.         self._prototypes[name] = prototype
  6.     def unregister_prototype(self, name):
  7.         del self._prototypes[name]
  8.     def clone(self, name):
  9.         if name in self._prototypes:
  10.             return self._prototypes[name].clone()
  11.         raise ValueError(f"Prototype {name} not found")
  12. # 注册和克隆示例
  13. manager = PrototypeManager()
  14. car_prototype = Car("BMW", "X5")
  15. manager.register_prototype("Luxury SUV", car_prototype)
  16. cloned_car = manager.clone("Luxury SUV")
  17. print(cloned_car)  # 输出: Car(make=BMW, model=X5, options=[])
复制代码
7. 总结

Prototype 模式在 Python 中通过 copy 模块实现,提供了基于现有对象的快速创建方式,制止了复杂的构造逻辑。它实用于需要频繁创建对象或保持对象状态一致性的场景,尤其在需要提高对象创建性能时非常有用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4