首页 > 编程语言 >Python设计模式-03-原型模式

Python设计模式-03-原型模式

时间:2023-06-16 18:25:11浏览次数:42  
标签:03 Prototype Python clone value 对象 复制 原型 设计模式

原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类来创建新对象。原型模式通常包括以下几个角色:

  • 原型(Prototype):定义了一个克隆自身的接口,用于复制现有对象。
  • 具体原型(Concrete Prototype):实现了原型接口,负责复制自身。
  • 客户端(Client):使用原型接口来复制现有对象,并创建新对象。

下面是一个简单的 Python 示例,演示了如何使用原型模式创建新对象:

import copy

class Prototype:
    def clone(self):
        pass

class ConcretePrototype(Prototype):
    def __init__(self, value):
        self.value = value

    def clone(self):
        return copy.deepcopy(self)

prototype = ConcretePrototype('value')
clone = prototype.clone()

print(clone.value)  # 输出 'value'

在上面的示例中,我们定义了一个原型接口 Prototype,它定义了一个 clone() 方法,用于复制现有对象。然后,我们定义了一个具体原型 ConcretePrototype,它实现了原型接口,负责复制自身。在 clone() 方法中,我们使用 copy.deepcopy() 函数来创建一个新对象,并将原对象的属性值复制到新对象中。最后,我们创建了一个具体原型对象 prototype,并调用它的 clone() 方法来创建一个新对象 clone。

需要注意的是,原型模式中的复制操作可能会比实例化类更加高效,因为它避免了重复创建对象的开销。但是,需要注意的是,复制操作可能会导致对象状态的不一致,因此需要谨慎使用。另外,需要确保对象的属性值是可复制的,否则可能会导致复制失败。

标签:03,Prototype,Python,clone,value,对象,复制,原型,设计模式
From: https://www.cnblogs.com/superhin/p/17486240.html

相关文章

  • Python设计模式-04-单例模式
    单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式通常包括以下几个角色:单例(Singleton):定义了一个静态方法或类方法,用于获取单例对象。客户端(Client):使用单例对象来完成具体的操作。下面是一个简单的Python示例,演示了如何使用单例模式创......
  • Python设计模式-05-适配器模式
    适配器模式是一种结构型设计模式,它可以将一个类的接口转换成客户端所期望的另一个接口。适配器模式通常包括以下几个角色:目标接口(Target):定义了客户端所期望的接口,可以是一个抽象类或接口。适配器(Adapter):实现了目标接口,并持有一个被适配对象的引用,负责将客户端的请求转换成被适......
  • Jenkins-Slave节点 电脑A控制电脑B运行Python脚本
    电脑A装了Jenkins的服务器,电脑B作为Jenkins的节点电脑(Slave)Jenkins服务的配置1、ManageJenkins>ConfigureSystem 找到JenkinsURL,确保不是127.0.0.1或者localhost就可以了。 2、ManageJenkins>ConfigureGlobalSecurity找到代理,设置端口或者选择随机选取,再把代......
  • [6] Fast and Practical Secret Key Extraction by Exploiting Channel Response 论文
    摘要摘要写的很清楚,几句话说明了当前密钥发展现状,即使用RSS为基础的密钥生成解决方案的生成速率有待提升,因此本文主打一个高速率;此外本文提出了CGC算法来解决现实生活中的信道互易性差的问题;此外,其能够抵御被认为对RSS技术有害的恶意攻击!但是他的Abstract我有一点不满哈,全文都是......
  • STUFF和FOR XML PATH('')
    初始状态:执行代码:SELECTSTUFF((SELECT','+Test_TableFROMdbo.Test_Table_MappingWHEREID=1570FORXMLPATH('')),1,1,'')text 显示结果 在SQLServer中,stuff()函数用于从源字符串中删除给定长度的字符序列,并从指定的起始索引插入给定的字符序列。STUFF(so......
  • Python设计模式-02-建造者模式
    建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括以下几个角色:产品(Product):表示被构建的复杂对象,通常包含多个部分或组件。抽象建造者(Builder):定义了创建产品的抽象接口,包括创建产品的各个部......
  • python自动使用虚拟环境和安装依赖
    代码如下,Windows环境测试通过importosimportplatformimportreimportsysfrompathlibimportPathdefis_venv()->bool:"""判断是否处于虚拟环境(也适用于poetry的)"""ifhasattr(sys,"real_prefix"):returnTruer......
  • Python - 方法参数中,带self和不带self的区别
    不带self该python文件中,没有类的概念。因此所有的方法参数中,没有self#文件名solution.pydefpartition(head:Optional[ListNode],x:int)->Optional[ListNode]:#...if__name__=='__main__':#注意这里的区别...partition() 如果未来要在其他类里......
  • python中parse的action = store_true含义
     我们在python脚本中经常看到action="store_true,如下图: parser.add_argument('--image',default=False,action="store_true",help='Imagedetectionmode,willignoreallpositionalarguments') 如果运行代码时加了   --image,那么im......
  • TesorFlow03.1-TesorFlow基础实战(前向传播(张量))
    在前面已经学习了:Whatwehavelearned▪createtensor▪indexingandslices▪reshapeandbroadcasting▪mathoperations现在用tensorFlow做一个前向传播的一个小实战:1.加载数据importtensorflowastffromtensorflowimportkerasfromtensorflow.kerasimp......