设计模式实例与代码:Prototype模式

[设计模式](四):建造者模式(Builder)与原型模式(Prototype)[含Kotlin深克隆实例代码] 建造者模式(Builder)与原型模式(Prototype)都是创建模式。 阅读详情

意图/定义:通过复制一个原型的实例来创建新的对象,而不是新建新实例,被复制的实例称之谓原型

问题:当新建一个实例步骤较多或代价较高,而复制一个已有实例比较快捷或代价较低

解决方案:为对象原型提供复制自己的操作

参与者与协作者:具体原型需要实现复制自己对象的操作,客户只请求已有原型复制其自身,即得到新的实例

效果:简化了客户对于创建新对象所需要了解的知识,客户不再需要重新自己费劲的创建一个新实例(如传递各种初始化参数)

实现:创建需要可以自我复制的类,为这些类提供clone实现,使得其可以以合适的方式返回自己的一个复本,当需要新对象的时候,从原型实例复制即可。




结构性的示例代码如下:

using System;
 
namespace Prototype
{
  /// <summary>
  /// MainApp startup class for Structural
  /// Prototype Design Pattern.
  /// </summary>
  class MainApp
  {
    /// <summary>
    /// Entry point into console application.
    /// </summary>
    static void Main()
    {
      // Create two instances and clone each
 
      ConcretePrototype1 p1 = new ConcretePrototype1("I");
      ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
      Console.WriteLine("Cloned: {0}", c1.Id);
 
      ConcretePrototype2 p2 = new ConcretePrototype2("II");
      ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone();
      Console.WriteLine("Cloned: {0}", c2.Id);
 
      // Wait for user
      Console.ReadKey();
    }
  }
 
  /// <summary>
  /// The 'Prototype' abstract class
  /// </summary>
  abstract class Prototype
  {
    private string _id;
 
    // Constructor
    public Prototype(string id)
    {
      this._id = id;
    }
 
    // Gets id
    public string Id
    {
      get { return _id; }
    }
 
    public abstract Prototype Clone();
  }
 
  /// <summary>
  /// A 'ConcretePrototype' class
  /// </summary>
  class ConcretePrototype1 : Prototype
  {
    // Constructor
    public ConcretePrototype1(string id)
      : base(id)
    {
    }
 
    // Returns a shallow copy
    public override Prototype Clone()
    {
      return (Prototype)this.MemberwiseClone();
    }
  }
 
  /// <summary>
  /// A 'ConcretePrototype' class
  /// </summary>
  class ConcretePrototype2 : Prototype
  {
    // Constructor
    public ConcretePrototype2(string id)
      : base(id)
    {
    }
 
    // Returns a shallow copy
    public override Prototype Clone()
    {
      return (Prototype)this.MemberwiseClone();
    }
  }
}


设计模式—“对象创建” 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。​ ——《设计模式》GoF所谓使一个类的实例化延迟到其子类,是因为抽象的 (工厂) 类不知道要实例化哪个具体 (产品) 类,所以实例化动作只能由具体的子 (工厂) 类去做, 抽象和具体 (工厂) 类中定义的、产生实例 (产品) 的接口函数,被我们成为工厂方法,因为它负责 “生产” 一个对象。 阅读详情

相关推荐

矩形口径喇叭天线设计——参数设置

我们建立好矩形口径喇叭天线的模型后(模型建立可参考B站相关视频或者李明洋的《HFSS天线设计》),如何修改参数达到我们的指标呢?

m0_57263863的博客 1万+

23种设计模式——Prototype模式

Prototype模式是提供自我复制的功能。包括浅拷贝和深拷贝。 一、Prototype模式的用途 场景1:游戏场景中有很多类似的敌人,它们的技能都一样,但是随着敌人出现的位置和不同,它们的能力也不太一样。那么,可以创建一个敌人抽象类,然后对于不同能力的步兵创建不同的子类。然

ao929929fei的专栏 957

电源工程师必看:平均电流模式BUCK双环控制详解(从传递函数到Psim仿真)

本文详细解析了平均电流模式BUCK变换器的双环控制策略,从传递函数推导到Psim仿真实现。针对电源工程师关注的环路设计和稳定性问题,深入比较了电压模式、峰值电流模式和平均电流模式的优缺点,并提供了12V/3A BUCK变换器的完整设计案例,帮助工程师掌握平均电流控制这一中高功率应用的首选方案。

weixin_42696271的博客 398

JavaScript设计模式

js工厂模式、构造函数模式、原型模式、组合模式

weixin_45813597的博客 226

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码)

本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。

weixin_30555125的博客 405

设计模式之命令模式(Command)摘录

设计模式之命令模式(Command)摘录!

网络资源是无限的 2736

模型量化必知:Per-Tensor和Per-Channel到底怎么选?

本文深入解析了模型量化中Per-Tensor与Per-Channel两种核心策略的抉择。Per-Tensor量化实现简单、硬件兼容性极佳,适合激活值或分布均匀的权重;而Per-Channel量化精度更高,能更好地处理权重分布不均的卷积层,是现代CNN权重量化的主流。文章提供了从硬件平台、数值分布到精度需求的实战决策框架,并推荐了“权重Per-Channel,激活Per-Tensor”的混合量化最佳实践。

assembly8low的博客 983

设计模式2 - 创建型模式

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。

初八 635

Apple 网页 SRP 登录系列文章(二):网页参数提取与会话初始化

本文深入解析了Apple网页SRP登录的第一个关键环节。文章首先指出Apple登录页面采用多层安全架构,包括跨域跳转机制和动态参数生成。重点介绍了四种关键参数(ServiceKey、SCNT、FrameId、ServiceNum)的提取技术,通过正则表达式和JSON路径解析从HTML脚本和HTTP头中获取。最后详细说明了会话初始化流程,包括访问初始页面和构建认证URL。这些技术细节揭示了Apple如何通过复杂机制确保登录过程的安全性。

Sayid_Des的专栏 1129

Error response from daemon: Get “https://index.docker.io/v1/search?q=nginx&n=25“:

在使用docker seach 命令搜索镜像的时候遇到这个错误,docker pull是可以正常下载镜像的,关于这个问题,本文提供解决方案,完全可行。

猿小白的博客 1万+

java创建型_java创建型模式有哪些?

java创建型模式有哪些?java创建型模式有:1、PROTOTYPE举例:跟MM用QQ聊天,一定要说些深情的话语了,我搜集了的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等...

weixin_39853843的博客 217

170、电机控制中的温升测试

本文以一次IGBT炸管事故为切入点,深入剖析电机控制中温升测试的实质:不仅是温度测量,更是对铜损、铁损、散热效率等热管理问题的系统验证。作者强调测试前热电偶布置、环境记录、预运行的重要性,提出实时监控电流谐波、绕组电阻、散热梯度等关键参数,并通过损耗分离与冷却系统实测,揭示真实热源。结合温升曲线异常分析与经验建议,强调留余量、仿真结合实测、关注瞬态工况等实践要点,警示温升测试是保障可靠性与安全性的核心环节。

2401_88858637的博客 48

设计模式之职责链模式(Chain of Responsibility)摘录

23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象。创建型模式有两个不断出现的主旋律。第一,它们都将关于该系统使用哪些详细的类的信息封装起来。第二,它们隐藏了这些类的实例是怎样被创建和放在一起的。整个系统...

weixin_30544657的博客 77

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

js中prototype方法

本文基于下面几个知识点:   1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。   2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: funct

u013406800的专栏 533

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

设计模式——Prototype模式

学习侯捷C++面向对象高级编程中Prototype模式。

m0_56391095的博客 1229

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式精解之——Prototype模式

0 引言0.1 目的       本文档给出设计模式之——Prototype模式的简化诠释,并给出其C++实现。0.2 说明ProjectDesign Pattern Explanation(By K_Eckel)AuthorizationFree Distributed but Ownership Reser

dadalan的专栏 1119

23种设计模式(六) —— 手写实现 Prototype 模式 (生成实例)

clone() 方法定义在 java.lang.Object 中,因为 Object 类是所有 java 类的父类。因此所有类都默认继承了 Object 类。小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

2401_85767411的博客 628

23种设计模式(六) —— 手写实现 Prototype 模式 (生成实例)(1)

clone() 方法定义在 java.lang.Object 中,因为 Object 类是所有 java 类的父类。因此所有类都默认继承了 Object 类。小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

2401_85767310的博客 1012

23种设计模式(六) —— 手写实现 Prototype 模式 (生成实例

Refer:《图解设计模式》2021年发表博文:一、通过复制生成的实例在 java 中,我们可以通过 new 关键字来生成实例。我们通常这样生成的实例都是要指定类名的。但是有时候,我们在开放的过程中,也有不指定类名来生成实例的需求。

2401_85112308的博客 1028

设计模式-原型模式 Prototype Pattern

通常,如果需要快速复制对象并且对象的创建成本较高,或者需要创建多个相似但不完全相同的对象,原型模式是一个更好的选择。原型模式(Prototype Pattern)是一种创建型设计模式,它允许你通过复制现有的对象来创建新的实例,而不是通过新建的方式来构造。使用原型模式可以提高对象创建的效率,降低系统的资源消耗,并有助于实现对象的快速复制和灵活管理。然而,需要注意的是,原型模式可能会增加内存消耗,并且在处理包含引用类型成员的对象时需要特别小心,以避免浅拷贝导致的问题。

wesigj的博客 1699

设计模式:原型模式(Prototype)

设计模式:原型模式(Prototype)

ProgramNovice的博客 1166

设计模式③ :生成实例

有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》(【日】结城浩 著)。该系列文章可随意转载。想确保任何情况下都绝对只有一个实例想在程序上表现出“只存在一个实例”像这种确保只生成一个实例的模式被称为Singleton 模式。Singleton :在 Singleton 模式中只有这一个角色。Singleton 角色中有一个返回唯一实例的 static 方法,该方法总是会返回同一个实例。

猫吻鱼的博客 1339

设计模式:Prototype模式

在软件开发中,有时候可能会需要创建一些特别复杂的对象,如果系统中已经存在同样类型的对象,并且不同的属性个数相差不大的话,用Prototype模式可能是一个理想的选择。 定义:用原型实例指定创建物件的种类,并且通过拷贝这些原型创建新的物件。  Prototype 模式允许一个物件再创建另外一个可定制的物件,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型物件传给那个要发

superbeck的专栏 2366
上一篇: 设计模式与实例代码:Template Method模式
下一篇: 在linux下使用debugfs恢复rm删除的文件
zzulp
博客等级 码龄19年 464粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值