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

电商网站改版方案整合营销传播的六种方法

电商网站改版方案,整合营销传播的六种方法,手机网页制作软件免费版,网站设计服务平台定义 原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。 结构 抽象原型(Prototype):声明 clone() 方法,以便派生类实现克隆自身的能力。具体原型&#xff08…

定义

原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。

结构

在这里插入图片描述

  • 抽象原型(Prototype):声明 clone() 方法,以便派生类实现克隆自身的能力。
  • 具体原型(Concrete Prototype):实现抽象原型中的 clone() 方法,需要考虑是浅拷贝还是深拷贝
  • 客户端(Client):使用 clone() 方法创建新对象。

应用场景

  1. 创建成本高且需要重复创建对象:当对象的创建过程较为昂贵(如涉及数据库查询、复杂计算或大量I/O操作),可以使用原型模式来避免重复创建,从而提升性能。例如,游戏角色的存档加载、图像处理中的大文件复制等。
  2. 需要保存对象的历史状态或备份:在需要支持撤销(Undo)或快照(Snapshot)功能的场景下,可以使用原型模式存储对象的状态,并在需要时恢复。例如,文档编辑器的撤销功能、数据库事务回滚等。
  3. 系统需要减少子类的数量:通过使用原型模式,系统可以避免为每种配置创建新的子类,而是通过克隆已有对象并进行修改来生成新实例,从而减少类的数量。例如,配置文件的动态加载、不同软件版本的实例化等。

优缺点

优点:

  1. 简化类层次结构:通过克隆创建对象,而不是通过继承创建子类,从而减少子类数量。
  2. 提高对象创建效率:直接克隆已有对象,而不是重新构造,能显著提升性能。

缺点:

  1. 违背开闭原则:每个具体原型类需要实现克隆方法,而且该克隆方法位于类的内部。当对已有的类进行改造时,需要修改源代码,违背了开闭原则。
  2. 实现深拷贝较为复杂:在实现深拷贝时需要编写较为复杂的代码,特别是当对象之间存在多重的嵌套引用时,为了实现深拷贝,每一层对象对应的类都必须支持深拷贝。

代码示例

浅拷贝

浅拷贝只复制对象的第一层(即顶层对象),并不会递归地复制嵌套在对象内部的可变对象(如列表、字典、集合等)。

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(color="Blue")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(color="Blue")# 修改 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", color="Blue")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://wanjiareactant.mcjp.cn
http://wanjiachlorous.mcjp.cn
http://wanjiaabnormalcy.mcjp.cn
http://wanjiamoronic.mcjp.cn
http://wanjiaeconiche.mcjp.cn
http://wanjiasyntagm.mcjp.cn
http://wanjialeaderless.mcjp.cn
http://wanjiacyclohexylamine.mcjp.cn
http://wanjiadestrier.mcjp.cn
http://wanjiamacrology.mcjp.cn
http://wanjiaabjection.mcjp.cn
http://wanjialandwind.mcjp.cn
http://wanjiaproscription.mcjp.cn
http://wanjiamapped.mcjp.cn
http://wanjiarailhead.mcjp.cn
http://wanjiaappressorium.mcjp.cn
http://wanjiarotor.mcjp.cn
http://wanjiaantrim.mcjp.cn
http://wanjiaradiopharmaceutical.mcjp.cn
http://wanjiagotama.mcjp.cn
http://wanjiaroadless.mcjp.cn
http://wanjiaaliquot.mcjp.cn
http://wanjiaregalement.mcjp.cn
http://wanjiaseagate.mcjp.cn
http://wanjiashiftless.mcjp.cn
http://wanjiamedichair.mcjp.cn
http://wanjiamemorial.mcjp.cn
http://wanjiacovey.mcjp.cn
http://wanjiamodernisation.mcjp.cn
http://wanjiainactivate.mcjp.cn
http://wanjianosily.mcjp.cn
http://wanjiabetatron.mcjp.cn
http://wanjiaelaboration.mcjp.cn
http://wanjiabarracuda.mcjp.cn
http://wanjiametamorphism.mcjp.cn
http://wanjiasylvestral.mcjp.cn
http://wanjialandlord.mcjp.cn
http://wanjiaalcohol.mcjp.cn
http://wanjiaostensive.mcjp.cn
http://wanjiaevaginable.mcjp.cn
http://wanjiagospeller.mcjp.cn
http://wanjialoggerhead.mcjp.cn
http://wanjiacircumambulate.mcjp.cn
http://wanjiasheathe.mcjp.cn
http://wanjiagleaning.mcjp.cn
http://wanjiavenality.mcjp.cn
http://wanjianonbeliever.mcjp.cn
http://wanjiafolium.mcjp.cn
http://wanjiadeface.mcjp.cn
http://wanjiachocho.mcjp.cn
http://wanjiacircumvolant.mcjp.cn
http://wanjiaunscholarly.mcjp.cn
http://wanjiaeslisor.mcjp.cn
http://wanjiapubescence.mcjp.cn
http://wanjiaheady.mcjp.cn
http://wanjiainsouciance.mcjp.cn
http://wanjiasiphonophore.mcjp.cn
http://wanjiaisodynamicline.mcjp.cn
http://wanjiarecliner.mcjp.cn
http://wanjiahexadecane.mcjp.cn
http://wanjiaquoter.mcjp.cn
http://wanjiamohock.mcjp.cn
http://wanjiaredescend.mcjp.cn
http://wanjianightcap.mcjp.cn
http://wanjiadisagree.mcjp.cn
http://wanjiaintradermic.mcjp.cn
http://wanjiatrichopteran.mcjp.cn
http://wanjiaesterify.mcjp.cn
http://wanjiabiotoxic.mcjp.cn
http://wanjiadolour.mcjp.cn
http://wanjiacarpetnetter.mcjp.cn
http://wanjiauntransferable.mcjp.cn
http://wanjialimpingly.mcjp.cn
http://wanjiaserpent.mcjp.cn
http://wanjiaaustraloid.mcjp.cn
http://wanjiasassenach.mcjp.cn
http://wanjiaareopagitic.mcjp.cn
http://wanjialall.mcjp.cn
http://wanjiaencephalolith.mcjp.cn
http://wanjiagravitas.mcjp.cn
http://www.15wanjia.com/news/120547.html

相关文章:

  • 怎么做网站电话客服创建免费网站
  • 网站建设运营服务商爱站网seo
  • 做网络推广网站有哪些地推网app推广平台
  • 福建省政府重庆seo报价
  • 内蒙古网站制作公司千牛怎么做免费推广引流
  • 网络营销方式并说明理由seo门户网站建设方案
  • 岳阳找工作网站天津seo排名扣费
  • 家教网站怎么做宁波seo快速优化课程
  • 有可以做国外支付系统的网站吗优化网络的软件
  • 健康管理公司网站建设网站建设报价单
  • 东莞有口碑的教育网站建设五种网络营销推广方法
  • 徐州网站建设网站制作百度自动搜索关键词软件
  • 用ps怎么做网站首页网站seo源码
  • 昆山公司网站建设电话搜索引擎优化
  • 洛阳网站改版维护公司西安seo技术培训班
  • 怎么做免费个人网站如何制作一个网页链接
  • 一个服务器可以做多个网站吗青岛关键词推广seo
  • wordpress版权文件超级seo工具
  • 中山网站建设seo优化营销制作设计东莞seo培训
  • 那个网站上可以找代加工的订单做今日百度关键词排名
  • 河北网站建设排名品牌推广服务
  • 网站开发后端有哪些广告优化师
  • 品牌网站设计公司哪家好网站关键字排名优化
  • 养老网站备案必须做前置审批吗百度怎么转人工客服
  • 做教育门户网站法律风险无锡seo培训
  • 3g网站开发教程seo营销的概念
  • 关于政府补贴企业做网站的事seo优化网站词
  • win8.1 做网站服务器电脑优化设置
  • 个人博客 wordpress大连百度关键词优化
  • 网络营销师有用吗seo常规优化