创建型设计模式之原型模式

Java创建型设计模式-原型模式 原型模式是一种创建型设计模式,‌它允许通过复制一个已经存在的对象来创建一个新的对象,‌而无需重新实例化。‌这种模式特别适用于那些需要创建类似对象的情况,‌可以避免重复的代码和资源浪费。‌原型模式的核心在于提供一个原型对象,‌通过这个原型对象来生成其他对象,‌而不需要知道这些对象的类结构。‌在本文,我们学习了Java的一种创建型设计模式原型模式,知道它拥有原型接口具体原型类客户端和克隆方法四个角色,还阐述了原型模式的使用场景,以及呈现了原型模式的代码示例,相信大家应该对原型模式不陌生了!! 阅读详情

一、原型模式概述

  • 定义:原型模式是一种创建型设计模式,其核心目标是更优雅地实现对象的拷贝,通过让对象实现克隆接口,以达到在不依赖具体类的情况下任意复制对象的目的。

就像复印机复印文件一样,我们有一个原始的“原型”对象,通过克隆操作可以快速得到与该原型具有相同属性的新对象,而无需重新进行复杂的初始化过程。

二、应用场景案例:RTS 游戏兵种生成

  • 场景描述:在即时战略(RTS)游戏中,玩家可以生成步兵、弓箭手和骑士等多种类型的兵种。这些兵种出生时的属性需要根据玩家当前的科技等级动态赋予,为了高效初始化新生成的兵种单位,我们采用原型模式。
  • 具体需求:在生成兵种时,避免每次都根据复杂的参数重新构造对象,而是基于已有的原型对象进行复制,以提高效率。

三、原型模式的实现方式

  1. 定义原型接口
    • 所有能够实现复制功能的产品类(如各种兵种类)都应该实现这个克隆接口。该接口通常包含一个克隆方法,用于返回当前对象的一个副本。
  2. 具体产品类实现克隆方法
    • 以骑士类为例,在构造函数中,对象需要传入很多参数进行构造。而在克隆方法的实现中,只是简单调用了类的拷贝构造方法。其他兵种类(如步兵、弓箭手)的代码实现结构与骑士类几乎完全相同。

四、原型模式的设计理念及优势

  1. 解耦对具体类的依赖
    • 问题:如果直接使用拷贝构造函数,想要拷贝一个对象时,需要知道具体的类。例如,若要复制一个骑士对象,就必须明确调用骑士类的拷贝构造函数。
    • 解决方案:原型模式通过让对象实现克隆接口,只需要对象实现了该接口,就能够任意复制,完全解除了对具体类的依赖。客户端代码在使用克隆功能时,无需关心对象的具体类型,只需要调用统一的克隆接口即可。
  2. 避免深拷贝、浅拷贝及对象状态污染问题
    • 问题:拷贝构造函数往往涉及到深拷贝和浅拷贝的问题,在内存管理上较为复杂。而且如果不保留原型,直接使用场景中已有的对象进行拷贝,还容易拷贝多余的对象状态,造成对象状态的污染。
    • 解决方案:原型模式通过提供语义更明确的克隆接口,将拷贝操作封装在对象内部,避免了这些潜在的问题。对象自己负责实现正确的拷贝逻辑,确保克隆得到的对象具有正确的属性和状态。
  3. 简化复杂对象的复制过程
    • 问题:如果不在原型模式中提供克隆接口,而是在类外手动拷贝类内的字段来实现对象之间的赋值,这种方法在面对复杂字段的对象时非常繁琐。每次产生新的对象时都要手动进行字段拷贝,大大增加了人为失误的可能性。同时,类的私有字段不便在类外进行访问,并且这种方式同样需要知晓具体的子类,从而产生不必要的依赖。
    • 解决方案:原型模式将拷贝逻辑封装在对象内部的克隆方法中,对象自己清楚如何正确地复制其内部的所有字段,包括私有字段。客户端只需要调用克隆方法,就可以轻松获得一个与原型对象具有相同属性的新对象,避免了手动拷贝的繁琐和错误。

五、原型模式的典型应用场景

  1. 游戏引擎中的预制体和游戏场景实例化
    • 在游戏引擎中,我们创建的独立的预制体或游戏场景,在游戏运行时,通常会从文件被反序列化成原型对象。每次将这些预制体或场景实例化到游戏场景中的过程,其实都是对它的克隆,这正是原型模式的应用。
  2. 配合解释器模式实现可定制游戏角色
    • 在更进阶的应用中,配合后续行为模式中讲解的解释器模式,可以实现仅通过简单的配置文件生成功能完备的可定制游戏角色。游戏开发者设计包含大部分功能的游戏角色原型,模组开发者只需要指定继承的原型,添加简单的自定义数据,在实例化时自动完成拷贝生成,便拥有了功能完备的新角色。这种应用在模组开发中非常有用,可以大大提高游戏的可扩展性和定制性。

六、总结

  • 原型模式的核心:通过定义克隆接口,让对象实现自我复制的能力,从而优雅地实现对象的拷贝。
  • 优势:解耦对具体类的依赖,避免深拷贝和浅拷贝及对象状态污染问题,简化复杂对象的复制过程。
  • 应用场景:适用于需要高效创建具有相同或相似属性的对象的场景,如游戏中的兵种生成、游戏引擎中的预制体和场景实例化等。
设计模式(四)原型模式Prototype(创建型) 设计模式(四)原型模式Prototype 1. 概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象而不需要提供专门的new()操作就可以快速完成对象的创建,这无疑是一种非常有效的方式,快速的创建一个新的对象。 例子1:孙悟空拔下一嘬猴毛,轻轻一吹就会变出好多的孙悟空来。 例..................... 阅读详情

相关推荐

告别Modern Standby噩梦:Win11睡眠断网冻结的根源剖析与S3睡眠回归实战

本文深入剖析了Windows 11中Modern Standby(现代待机)模式导致睡眠后断网、系统冻结等问题的根源,指出其与硬件驱动、后台活动的兼容性矛盾。文章提供了通过修改注册表键值强制系统回归稳定S3睡眠状态的详细实战步骤,帮助用户彻底解决睡眠故障,实现可靠的远程访问与挂机任务。

weixin_29210727的博客 604

设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析

原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想在于通过复制现有的对象(原型)来创建新的对象,而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效,因为它避免了重复的初始化过程。

JINGWHALE 1849

基于多智能体协作的量化交易研究框架TradingAgents详解

量化交易系统通过算法模型分析市场数据,旨在实现自动化投资决策。其核心原理在于利用计算机强大的数据处理能力,结合统计学和机器学习方法,从历史数据中挖掘可重复的盈利模式。这一技术的价值在于能够克服人类情绪干扰,实现纪律性交易,并快速处理海量信息。在应用场景上,量化策略广泛应用于股票、期货、外汇等多个金融市场。本文聚焦的TradingAgents框架,创新性地引入了**多智能体协作**和**对抗性验证**机制,通过模拟真实投研团队的分工与辩论流程,构建了一个研究友好、决策过程可解释的量化交易研究平台,为探索大语言

weixin_36019375的博客 431

设计模式 - 创建型 - 原型模式(Prototype Pattern)

原型模式是一种创建型设计模式,通过克隆现有对象高效生成新实例,适用于高成本对象创建或动态配置场景。其核心分为抽象原型、具体原型和客户端三个角色,支持浅克隆(共享引用)和深克隆(完全独立)两种实现方式。相比工厂模式,原型更适合复杂对象构造和性能优化场景,但深克隆实现较复杂。典型应用包括Java的Cloneable接口、Spring原型Bean及游戏角色复制。该模式显著提升对象创建效率,但需权衡内存管理与实现复杂度。

csdn_tom_168的博客 936

傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)

本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。

weixin_29090677的博客 150

Tessent ICL语法详解:如何高效定义SIB、TDR和TAP模块

本文深入解析Tessent ICL语法,指导如何高效定义SIB、TDR和TAP模块以构建芯片测试网络。通过实战代码示例,详细阐述了各模块的端口声明、接口角色与核心寄存器定义,并提供了顶层集成连接方法与调试技巧,帮助DFT工程师精准描述测试仪器拓扑,提升Tessent工具链使用效率。

silver的专栏 492

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) 用原型实例指定创建对象的种类,并且通过复制这些原型,创建新的对象。

Z 551

php环境如何实现国密SM2相关功能

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1615

【c++设计模式08】创建型6:原型模式(Prototype Pattern)

原型模式定义了一个原型接口,该接口用于复制现有对象以创建新对象,从而避免了昂贵的构建过程。使用原型模式,我们可以根据现有对象创建新对象,同时保持对象的类型和状态。浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深拷贝:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明显是深复制,clone出来的对象是是不能去影响原型对象的。

junxuezheng的博客 1581

群晖、飞牛NAS容器进入终端失败?一步步教你解决Docker Bash错误!(OCI runtime exec failed: exec failed)

群晖、飞牛NAS容器进入终端失败?一步步教你解决Docker Bash错误!(OCI runtime exec failed: exec failed)

XiaoqiangClub的博客 2988

Codex入门00-初识神器(小白入门:到底什么是Codex CLI,和ChatGPT写代码有什么不同?)

OpenAI Codex CLI 是 OpenAI 于2025年推出的终端原生AI编程代理,不是在网页里聊天写代码,而是直接在你的终端里自主读代码、改文件、跑命令。它拥有三种安全模式、/goal 持久化任务、云端沙箱执行等独特能力。本文从零介绍 Codex CLI 的核心概念、与 ChatGPT 写代码的本质区别、典型使用场景和费用说明,让你全面认识这个改变开发方式的神器。

yueyeguzhuo的专栏 301

【设计模式】创建型模式-原型模式(Prototype Pattern)

原型模式是一种创建型设计模式,允许通过复制现有对象(原型)来创建新对象,而无需依赖子类化。核心思想是将对象创建过程委托给对象自身,通过克隆机制实现高效的对象复制。

weixin_43510208的博客 584

【数据分析】R语言分段结构方程模型手把手教程(Piecewise Structural Equation Model)

分段结构方程模型(Piecewise Structural Equation Model, SEM)是一种用于分析变量之间因果关系的统计方法。它通过将复杂的因果关系分解为多个简单的线性模型来评估变量之间的直接和间接效应。与传统的结构方程模型(SEM)不同,分段结构方程模型不需要假设数据的多变量正态分布,因此在处理非正态数据时更为灵活。

专注生信领域 2647

【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)

原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过构造函数。这种方式可以提高性能,特别是在对象初始化需要消耗大量资源或耗时较长的情况下。性能提升:通过复制现有对象来创建新对象,可以避免复杂的初始化过程,提高性能。代码简洁:减少了重复的代码,特别是当对象的初始化过程非常复杂时。灵活度高:可以通过修改原型对象的属性来创建不同配置的对象实例。深拷贝和浅拷贝的问题:需要仔细处理对象的深拷贝和浅拷贝问题,否则可能会导致意外的行为。类必须实现克隆方法:每个需要被克隆的类都必须实现。

ido1ok的博客 861

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

设计模式 ~ 创建型模式 ~ 原型模式 ~ Prototype Pattern。

设计模式 ~ 创建型模式 ~ 原型模式 ~ Prototype Pattern。

lyfGeek的博客 271

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

设计模式——创建型之原型模式

设计模式——创建型之原型模式 拷贝已有对象作为新对象,这种创建对象的模式叫做原型模式 原型类: public class Prototype implements Cloneable{ private String paramA; private String paramB; private ParamObject paramC; public String getParamA() { return paramA; } public vo

大造梦家的博客 427

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【设计模式精讲】创建型模式之原型模式(深克隆、浅克隆)

定义: 原型模式(Prototype Design Pattern)用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。西游记中的孙悟空 拔毛变小猴,孙悟空这种根据自己的形状复制出多个身外化身的技巧,在面向对象软件设计领域被称为原型模式.孙悟空就是原型对象.原型模式主要解决的问题。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

创建型设计模式——原型模式

那么克隆可能会在父类和子类之间进行,并且可能是动态的,很明显通过父类的拷贝构造函数无法实现对子类对象的拷贝。当要创建的对象类型由原型实例确定时使用,该实例被克隆以生成新对象。使用原型实例指定要创建的对象的种类,并通过复制此原型来创建新对象。可能想要通父类指针或引用把指向的子类对象克隆出来。,应该注意原型模式不是用来获得性能优势的。克隆这个对象不需要使用构造函数。⚠️注意:**浅克隆(浅复制)深克隆(深复制)**之间的区别。对象不包含指针或动态分配的资源。仅用于从原型实例创建新对象。

2502_93606049的博客 385

【设计模式】创建型模式——原型模式

原型模式——克隆生成对象。

这里是Mae。 1109

【设计模式】创建型模式(五):原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

Data · Model · Agent · Repeat 1197

Java GoF 23种设计模式-创建型模式-原型模式(Prototype Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现五、优缺点5.1 原型模式优点5.2 原型模式缺点 一、模式定义 原型模式(Prototype Pattern)是一种创建型设计模式,使你能够复制已有对象, 而又无需使代码依赖它们所属的类。原型模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用原型模式。 二、模式动机 在我们应用程序可能有某些对象的结构比较复杂,但是我们又需要频繁的使用它们,如果这个时候我们来不断的新建这个对象势必会大大损耗系统内存的,这个时候

WU4566285的博客 373

设计模式:创建型模式--原型模式(Prototype Pattern)

设计模式:创建型模式–原型模式(Prototype Pattern) 文章目录设计模式:创建型模式--原型模式(Prototype Pattern)1. 概念2. 组成结构3. 实现细节4. 具体案例5. 使用场景6. 扩展内容6.1 克隆(Clone)6.2 浅克隆(Shallow Clone)6.3 深克隆(Deep Clone)6.3.1 Clone6.3.2 对象流 1. 概念 原型模式(Prototype Pattern)通常被用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式

ZZay's 362

设计模式(四):创建型之原型模式

用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。

从基础到源码解析的学习记录 1009

【设计模式】【创建型模式】原型模式(Prototype)

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化类。原型模式的核心是克隆(Clone),即通过复制现有对象来创建新对象。Java 提供了 Cloneable 接口和 clone() 方法来实现对象的浅拷贝。高效创建对象通过复制现有对象来创建新对象,避免了重复的初始化过程,特别适用于创建成本较高的对象(如数据库连接、复杂计算对象)。

flzjkl的博客 1521

设计模式 创建型 单例模式 原型模式 享元模式

目录一、创建型 单例模式 原型模式 享元模式二、区别三、new一个对象和clone一个对象 一、创建型 单例模式 原型模式 享元模式 单例模式 原型模式 原型模式是通过给出一个原型对象来指明所创建的对象的类型,然后使用自身实现的克隆接口来复制这个原型对象,该模式就是用这种方式来创建出更多同类型的对象。 使用这种方式创建新的对象的话,就无需再通过 new 实例化来创建对象了。这是因为 Object 类的 clone 方法是一个本地方法,它可以直接操作内存中的二进制流,所以性能相对 new 实

ray的博客 384
上一篇: 创建型设计模式之建造者模式
下一篇: 结构型设计模式之适配器模式
WDaMu
博客等级 码龄4年 27粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值