当前位置: 首页 > news >正文

顺义顺德网站建设网站优化流程

顺义顺德网站建设,网站优化流程,淄博免费建站,网站建设都需要买什么东西定义 原型模式是一种创建型设计模式#xff0c;它可以通过复制现有对象来创建新对象#xff0c;而不是直接实例化新的对象。 结构 抽象原型#xff08;Prototype#xff09;#xff1a;声明 clone() 方法#xff0c;以便派生类实现克隆自身的能力。具体原型#xff08…定义 原型模式是一种创建型设计模式它可以通过复制现有对象来创建新对象而不是直接实例化新的对象。 结构 抽象原型Prototype声明 clone() 方法以便派生类实现克隆自身的能力。具体原型Concrete Prototype实现抽象原型中的 clone() 方法需要考虑是浅拷贝还是深拷贝。客户端Client使用 clone() 方法创建新对象。 应用场景 创建成本高且需要重复创建对象当对象的创建过程较为昂贵如涉及数据库查询、复杂计算或大量I/O操作可以使用原型模式来避免重复创建从而提升性能。例如游戏角色的存档加载、图像处理中的大文件复制等。需要保存对象的历史状态或备份在需要支持撤销Undo或快照Snapshot功能的场景下可以使用原型模式存储对象的状态并在需要时恢复。例如文档编辑器的撤销功能、数据库事务回滚等。系统需要减少子类的数量通过使用原型模式系统可以避免为每种配置创建新的子类而是通过克隆已有对象并进行修改来生成新实例从而减少类的数量。例如配置文件的动态加载、不同软件版本的实例化等。 优缺点 优点 简化类层次结构通过克隆创建对象而不是通过继承创建子类从而减少子类数量。提高对象创建效率直接克隆已有对象而不是重新构造能显著提升性能。 缺点 违背开闭原则每个具体原型类需要实现克隆方法而且该克隆方法位于类的内部。当对已有的类进行改造时需要修改源代码违背了开闭原则。实现深拷贝较为复杂在实现深拷贝时需要编写较为复杂的代码特别是当对象之间存在多重的嵌套引用时为了实现深拷贝每一层对象对应的类都必须支持深拷贝。 代码示例 浅拷贝 浅拷贝只复制对象的第一层即顶层对象并不会递归地复制嵌套在对象内部的可变对象如列表、字典、集合等。 import copy from abc import ABC, abstractmethod# 抽象原型类 class Prototype(ABC):abstractmethoddef clone(self):pass# 具体原型类Car class Car(Prototype):def __init__(self, brand, model, color):self.brand brandself.model modelself.color colordef __str__(self):return f{self.color} {self.brand} {self.model}def clone(self, **attrs):克隆对象并允许修改部分属性# 创建浅拷贝cloned_obj copy.copy(self)# 更新克隆对象的属性cloned_obj.__dict__.update(attrs)return cloned_obj# 创建原型对象 car1 Car(Tesla, Model S, Red)# 克隆对象并修改颜色 car2 car1.clone(colorBlue)print(car1) # 输出: Red Tesla Model S print(car2) # 输出: Blue Tesla Model S深拷贝 深拷贝会递归地复制对象及其所有嵌套的可变对象创建一个完全独立的新对象。 深拷贝的代码只需要在浅拷贝代码的基础上把copy.copy(self)改成copy.deepcopy(self)即可。 # 具体原型类Car class Car(Prototype):def __init__(self, brand, model, color, features):self.brand brandself.model modelself.color colorself.features features # 可变对象如列表def __str__(self):return f{self.color} {self.brand} {self.model}def clone(self, **attrs):深拷贝对象并允许修改部分属性# 创建深拷贝cloned_obj copy.deepcopy(self)# 更新克隆对象的属性cloned_obj.__dict__.update(attrs)return cloned_obj# 创建原型对象 car1 Car(Tesla, Model S, Red, [Autopilot, Glass Roof])# 克隆对象并修改颜色 car2 car1.clone(colorBlue)# 修改 car2 的 features car2.features.append(Self-driving)# 查看 car1 和 car2 的内容 print(car1:, car1) # 输出: Red Tesla Model S print(car2:, car2) # 输出: Blue Tesla Model S print(car1.features:, car1.features) # 输出: [Autopilot, Glass Roof] print(car2.features:, car2.features) # 输出: [Autopilot, Glass Roof, Self-driving]原型管理器 原型管理器用于管理和存储原型对象它存储系统中常用的原型对象并为客户端提供访问和拷贝这些原型对象的接口能够减少重复创建原型对象的工作。 下面为深拷贝代码示例增加原型管理器 # 原型管理器 class PrototypeManager:def __init__(self):self._prototypes {}def register(self, name, obj):注册原型对象self._prototypes[name] objdef unregister(self, name):移除原型对象if name in self._prototypes:del self._prototypes[name]def clone(self, name, **attrs):克隆对象并可修改部分属性if name not in self._prototypes:raise ValueError(f原型 {name} 未注册)return self._prototypes[name].clone(**attrs)# 创建原型管理器 prototype_manager PrototypeManager()# 创建一个Car实例并注册到原型管理器 car1 Car(Tesla, Model S, Red, [Autopilot, Glass Roof]) prototype_manager.register(electric_car, car1)# 克隆对象并修改颜色 car2 prototype_manager.clone(electric_car, colorBlue)print(car1) # 输出: Red Tesla Model S print(car2) # 输出: Blue Tesla Model S# 取消注册某个原型 prototype_manager.unregister(electric_car)# 再次尝试克隆会抛出异常 try:car3 prototype_manager.clone(electric_car) except ValueError as e:print(e) # 输出: 原型 electric_car 未注册参考 《设计模式的艺术》
http://www.hkea.cn/news/14501328/

相关文章:

  • 福州省建设局网站erp软件开发定制
  • 做网站1500全包俄文网站开发
  • 网站制作公司制作网站遵义创意网站设计
  • 中国建设企业银行官网站网站建设核心技术创新点
  • 南京做网站哪家好html做音乐网站模板
  • 网站建设策划书心得大数据平台的搭建
  • 网站建设维护面试可爱风格网站
  • h5模板网站模板专业做制作网站
  • 传奇霸主网页版seo网站地图怎么做
  • 建设企业网站制作公司常州市建设局网站资质
  • 免费的源码网站有哪些深圳企业网站制作公司哪家好
  • 福清可以做宣传的网站个人网站建设合同范本
  • 湖州建设局网站 项目验收流程网站设计 网站开发 西安
  • 24 手表网站怎么制作游戏修改器
  • 做做网站下载免费淘宝培训
  • 中山网站制作工具做网站的html框架
  • 做网站上饶嘉兴专业定制网站制作企业
  • 梅花手表网站凉州区住房城乡建设局网站
  • 建设部网站首页格式合同网站502 解决办法
  • 物流做网站哪家好500套wordpress模板
  • 给公司做网站和公众号需要多少钱深圳有哪些软件开发公司
  • 更改了网站关键词后要怎么做英迈寰球网站建设
  • 郴州网站网页设计与制作代码成品
  • 南京做网站seo的企业管理公司的经营范围
  • 高校档案网站建设seo搜索引擎优化简历
  • 个人网站可以放广告吗全球可以做外贸的社交网站
  • 傻瓜内网网站建设网架公司招聘打板施工队伍
  • 同德县公司网站建设青团智慧团建登录入口
  • 中讯高科网站建设wordpress 安装插件
  • 网站开发掌握哪种语言厦门网站建设模拟