9【原型模式】复制一个已存在的对象来创建新的对象

你好,我是程序员雪球。

今天我们来学习23种设计模式之原型模式,在平时开发过程中比较少见。我带你了解什么是原型模式,使用场景有哪些?有什么注意事项?深拷贝与浅拷贝的区别,最后用代码实现一个简单的示例。

 90dd0da65e7d4a4890f42ca65050befb.png

 

一、是什么?

原型模式是一种创建对象的模式,它通过复制一个已存在的对象来创建新的对象,而不是通过传统的 new 操作符来创建对象。这种模式的主要目的是提高创建对象的效率和性能,尤其是在需要创建大量相似对象的情况下。

 

二、使用场景:

 

- 当创建对象的过程比较复杂或耗时较长时,使用原型模式可以提高创建对象的效率。

- 当需要创建大量相似对象时,使用原型模式可以减少内存的开销。

- 当需要动态地创建对象时,使用原型模式可以方便地实现对象的复制和修改。

 

三、注意事项

 

- 在使用原型模式时,需要注意深拷贝和浅拷贝的区别。浅拷贝只复制对象的引用,而不复制对象的内容,因此在修改原始对象时,复制对象也会受到影响。深拷贝则会复制对象的所有内容,包括嵌套对象,因此在修改原始对象时,复制对象不会受到影响。

 

- 在使用原型模式时,需要注意对象的创建和销毁。由于原型模式通过复制对象来创建新对象,因此需要确保原始对象在不再需要时被正确地销毁,以释放内存资源。

 

四、代码示例

接下来让我们用 Java 来实现一个简单的示例吧。

 

 

public class PrototypePattern {

    public static void main(String[] args) {

        PrototypePrototype obj1 = new PrototypePrototype("Apple");

        PrototypePrototype obj2 = obj1.clone();

 

        // 修改 obj2 的属性

        obj2.setName("Banana");

 

        // 输出 obj1 和 obj2 的属性

        System.out.println(obj1.getName());

        System.out.println(obj2.getName());

    }

}

 

class PrototypePrototype implements Cloneable {

    private String name;

 

    public PrototypePrototype(String name) {

        this.name = name;

    }

 

    // 获取对象的克隆

    public Object clone() throws CloneNotSupportedException {

        return super.clone();

    }

 

    // 获取对象的名称

    public String getName() {

        return name;

    }

 

    // 设置对象的名称

    public void setName(String name) {

        this.name = name;

    }

}

 

 

在上面的示例中,我们定义了一个 PrototypePrototype 类,它实现了 Cloneable 接口,并重写了 clone() 方法。在 PrototypePrototype 类中,我们有一个私有成员变量 name,用于存储对象的名称。我们还提供了 getName() 和 setName() 方法,用于获取和设置对象的名称。

 

在 main() 方法中,我们创建了两个 PrototypePrototype 对象 obj1 和 obj2。我们使用 obj1.clone() 方法来创建 obj2,这将返回一个与 obj1 完全相同的副本。然后,我们修改 obj2 的名称,并输出 obj1 和 obj2 的名称。

 

通过使用原型模式,我们可以通过复制已存在的对象来创建新的对象,而不必每次都重新创建对象。这样可以提高创建对象的效率和性能,尤其是在需要创建大量相似对象的情况下。

 

总结

dda33a724fc54c2494f256e5b4a10df2.png

 

一、是什么?

原型模式通过复制一个已存在的对象来创建新的对象,而不是通过传统的 new 操作符来创建对象。这样可以提高创建对象的效率和性能,尤其是在需要创建大量相似对象的情况下。

二、使用场景:

1、创建比较耗时的对象场景;

2、创建大量相似对象场景;

3、动态创建对象场景;

三、注意事项:

1、浅拷贝只复制对象的引用,而不复制对象的内容,因此在修改原始对象时,复制对象也会受到影响。

2、深拷贝则会复制对象的所有内容,包括嵌套对象,因此在修改原始对象时,复制对象不会受到影响。

3、在使用原型模式时,需要注意对象的创建和销毁。

 

想要了解更多设计模式相关知识,请关注我吧,下期持续更新。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/552225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全球半导体排行:台积电登顶,中芯国际第24位

最新发布的《麦克莱恩报告》4月更新揭示了2023年全球前50大半导体供应商的最终排名情况,其中前25强名单尤为引人注目。台积电(TSMC)凭借强劲的市场表现和业务增长,成功超越其他竞争对手,跃居全球半导体供应商首位。与此…

C# danbooru Stable Diffusion 提示词反推 OpenVINO Demo

C# danbooru Stable Diffusion 提示词反推 OpenVINO Demo 目录 说明 效果 模型信息 项目 代码 下载 说明 模型下载地址:https://huggingface.co/deepghs/ml-danbooru-onnx 效果 模型信息 OVVersion { BuildNumber 2023.1.0-12185-9e6b00e51cd-releases/20…

干货!微信小程序通过NodeJs连接MySQL数据库

在前后端数据库架构的思维中,微信小程序的生态地位是充当前端,后端和数据库还需开发者另外准备。微信开放社区提供强悍的云函数、云数据库、CMS内容管理,无疑为开发小程序的功能提供了不少便捷。 当我们在开发PC端的系统时,常见的…

新闻媒体行业邮件推广:精准推送,创造价值

在当今信息爆炸的时代,新闻行业如何在竞争激烈的市场中脱颖而出,吸引读者的目光,成为了每个新闻机构都需要认真思考的问题。许可式邮件营销成为了一种强大的工具,不仅能够向订阅者发送新闻期刊,还能够向广告商发送宣传…

【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解

文章目录 一、基于注解的AOP1、配置Spring环境2、在beans.xml文件中定义AOP约束3、定义记录日志的类【切面】4、定义Bean5、在主配置文件中配置扫描的包6、在主配置文件中去开启AOP的注解支持7、测试8、优化改进9、总结 一、基于注解的AOP 1、配置Spring环境 <dependencie…

雨伞-浅色脚本

渲染参考&#xff1a;明亮/干净/高级 静帧参考 解说 镜头时长 效果参考 中景画面展示3把竖着的浅色的伞 1s / 特写展示伞把手 1s 中景展示雨伞全貌 2s 微观镜头 缝线动画 3s 镜头旋转至伞面微观材质镜头&#xff0c;展现其多层结构 10s 微观镜头 水珠滑动在伞…

不说成为Linux高级工程师,但成为合格的软件开发人员还是够了,一文深入浅出的精炼总结Linux核心知识点,掌握Linux的使用与高阶技巧

不说成为Linux高级工程师&#xff0c;但成为合格的软件开发人员还是够了&#xff0c;一文深入浅出的精炼总结Linux核心知识点&#xff0c;掌握Linux的使用与高阶技巧。 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发&#xff0c;接触 Linux 机会相对…

1.SCI各模块

1.学会“抄” 写论文&#xff0c;一定要学会“抄”&#xff01;这样才能事半功倍&#xff0c;尤其是对于初次写作的新手&#xff0c;否则写作过程一定会让你痛不欲生&#xff0c;而且写出来的东西就是一坨shi&#xff0c;不仅折磨自己&#xff0c;也折磨导师。 写论文与建大楼…

Ubuntu 20.04.06 PCL C++学习记录(二十五)

[TOC]PCL中点云分割模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16&#xff0c;可用点云下载地址 学习内容 使用渐进形态滤波器分割识别地面回波&#xff0c;即执…

JookDB下载安装使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

离岸人民币与人民币国际化

参考 什么是离岸人民币&#xff1f;它有什么用&#xff1f; - 知乎 “人民币就是人民币&#xff0c;为什么要在它前面加上离岸二字&#xff1f;” “既然有离岸人民币&#xff0c;是否有在岸人民币&#xff1f;” 今天我们就简单了解一下什么是离岸人民币。 离岸/在岸人民币…

久吾高科技股份有限将莅临2024第13届生物发酵展

参展企业介绍 江苏久吾高科技股份有限公司成立于1997年&#xff0c;是一家专注从事新材料研发与整体解决方案的高科技企业。2017年3月在深交所A股创业板上市。公司是首批认定的guojiaji高新技术企业、国家专精特新“小巨人”企业、国家制造业单项、中国膜行业陶瓷膜领域龙头企…

Xinstall一站式App推广解决方案,让营销更高效

在移动互联网时代&#xff0c;App的推广与运营成为了开发者们面临的一大挑战。如何快速有效地推广App&#xff0c;提高安装量&#xff0c;增加用户活跃度&#xff0c;是每一个开发者都迫切需要解决的问题。而Xinstall&#xff0c;作为一家专业的一站式App全渠道统计服务商&…

ESP8266闪存文件系统(SPIFFS)

开发环境&#xff1a; 1、安装ESP8266的开发环境&#xff0c;如Arduino IDE。 2、下载并安装ESP8266的相关开发库和工具。 我们使用的是Arduino IDE。 基本介绍&#xff1a; 每一个ESP8266都配有一个闪存&#xff0c;这个闪存很像是一个小硬盘&#xff0c;我们上传的文件就被…

linux限权

shell命令以及运行原理 什么是shell命令&#xff1a; 将使用者的命令翻译给核心&#xff08;kernel&#xff09;处理。同时&#xff0c;将核心的处理结果翻译给使用者。 shell就相当于操作系统外的一层外壳 其实就是登录linux时的一个可执行程序&#xff08;进程&#xff09…

Python实现BOA蝴蝶优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

图像基础—图像分类

图像通常分为二值图像、灰度图像和彩色图像 图 1-3 二值图像、灰度图像和彩色图像 &#xff08;1&#xff09;二值图像 二值图像又称为黑白图像&#xff0c;图像中任何一个点非黑即白&#xff0c;要么为白色&#xff08;像素 为 255&#xff09;&#xff0c;要么为黑色&#x…

vue简单使用二(循环)

目录 属性绑定 if判断&#xff1a; for循环&#xff1a; 属性绑定 代码的形式来说明 三元表达式的写法&#xff1a; if判断&#xff1a; for循环&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"…

【行业前沿】制造业的数字化转型如何做?

随着科技的迅速发展&#xff0c;数字化转型已经成为制造型企业提高竞争力的关键因素。它可以帮助制造型企业&#xff0c;在产品优化设计、材料采购、生产流程方面实现精细化管理&#xff1b;提升上下游协同生产能力&#xff0c;提高生产效率、降低生产成本、优化产品质量&#…

启明智显应用分享|基于ESP32-S3方案的SC01PLUS彩屏与chatgpt融合应用DEMO

今天将带大家真实体验科技与智慧的完美融合——SC01PLUS与ChatGPT的深度融合DEMO效果呈现。 彩屏的清晰显示与ChatGPT的精准回答&#xff0c;将为我们带来前所未有的便捷与高效。 SC01PLUS是启明智显基于ESP32-S3打造的一款3.5寸480*320分辨率的彩屏产品&#xff0c;您可以看…