上海建筑网站大全,企业外贸网站建设,给新公司建网站,电商具体是做什么的上班一、说明
原型模式是一种创建型设计模式#xff0c; 用于创建重复的对象#xff0c;同时又能保证性能。
使一个原型实例指定了要创建的对象的种类#xff0c;并且通过拷贝这个原型来创建新的对象。
(一) 解决问题
主要解决了对象的创建与复制过程中的性能问题。主要针对…
一、说明
原型模式是一种创建型设计模式 用于创建重复的对象同时又能保证性能。
使一个原型实例指定了要创建的对象的种类并且通过拷贝这个原型来创建新的对象。
(一) 解决问题
主要解决了对象的创建与复制过程中的性能问题。主要针对复杂对象和相识对象的创建
在某些情况下直接使用new关键字或者其他方式创建对象可能会导致性能损耗较大特别是当对象的创建过程比较复杂或者耗时时。
(二) 使用场景
类初始化时需要消耗大量资源如数据、硬件资源等。通过原型拷贝可以避免这些消耗提高资源利用率。创建对象时需要繁琐的数据准备或访问权限。原型模式可以简化对象的创建过程提高性能。一个对象需要提供给其他对象访问并且各个调用者可能需要修改其值。通过保护性拷贝可以创建多个对象供调用者使用同时保持原对象的状态不变。
二、结构 原型Prototype接口将对克隆方法进行声明。在绝大多数情况下其中只会有一个名为clone克隆的方法。具体原型Concrete Prototype类将实现克隆方法。除了将原始对象的数据复制到克隆体中之外该方法有时还需处理克隆过程中的极端情况例如克隆关联对象和梳理递归依赖等等。客户端Client可以复制实现了原型接口的任何对象。
三、伪代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__
原型模式
用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。例通过原型实例克隆多个人的对象并更新其属性
import copyclass Prototype:def __init__(self):self._objs {}def register_object(self, key, obj):self._objs[key] objdef unregister_object(self, key):del self._objs[key]def clone(self, key, **attrs):obj copy.deepcopy(self._objs[key])obj.__dict__.update(attrs)return objclass People:def __init__(self, name: str, age: int):self.name nameself.age agedef __str__(self):return f{self.__dict__}if __name__ __main__:Original: {name: 张三, age: 20}Clone: {name: 李四, age: 24}# 创建原型对象prototype Prototype()# 创建一个 People 实例并注册为原型对象people People(name张三, age20)prototype.register_object(people, people)# 克隆一个 People 实例people_clone prototype.clone(people, name李四, age24)# 输出原型对象和克隆对象print(Original:, people)print(Clone:, people_clone)四、优缺点
优点
性能提升通过复用已有对象避免了重复的对象创建和初始化过程从而提高了性能。简化创建过程客户端代码无需知道对象创建的细节只需要调用克隆方法即可。
缺点
复杂度增加需要实现克隆方法深拷贝和浅拷贝问题在实现克隆方法时需要考虑深拷贝和浅拷贝的问题。浅拷贝只复制对象本身和其中的基本数据类型而深拷贝会复制对象及其引用的所有对象。如果处理不当可能会导致对象之间的意外关联或修改。 跳转主页【Python笔记】设计模式-CSDN博客