设计模式04----原型模式

news/2024/9/25 6:27:55

原型模式(Prototype Pattern)是一种创建型设计模式,在软件工程中用来创建对象的副本,从而避免新建对象时的性能开销。此模式利用已存在的对象实例作为原型,通过克隆(Clone)机制来创建新的对象,新对象与原型对象具有相同的属性和状态,但彼此独立,修改一个对象不会影响到另一个。

原理与特点
核心思想:通过复制已经存在的对象来创建新的对象,而不是通过new操作符来创建新对象。这样可以减少对象创建的性能消耗,特别是在创建对象的过程较为复杂或资源消耗较大时。

角色划分:

Prototype(原型):声明一个克隆自身的方法,这是一个接口或抽象类,所有具体原型类都需要实现这个克隆方法。
ConcretePrototype(具体原型):实现Prototype接口,定义克隆自身的具体逻辑,真正完成克隆操作。
适用场景:

需要创建的对象类型繁多,但是创建逻辑相似或部分相同。
创建新对象成本较高,如初始化过程复杂、资源消耗大。
需要避免因使用new操作而产生大量重复代码。
优缺点:

优点:提高对象创建的效率和性能,简化对象的创建过程;易于维护和扩展。
缺点:每个类都需要实现克隆方法,增加了类的复杂度;深拷贝与浅拷贝的问题需要特别注意,以避免共享引用造成意外修改。
实现方式
浅拷贝:创建一个新对象,复制原对象的基本数据类型属性,对于引用类型属性,则复制其引用,因此原对象和克隆对象会共享这些引用类型的值。
深拷贝:除了复制基本数据类型属性外,还会递归地复制引用类型属性,确保原对象和克隆对象之间完全独立,无共享引用。



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

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

相关文章

DLP数据防泄密产品选型时 要注意哪些要素?

DLP(Data Loss Prevention,数据丢失防护)产品是一套用于防止敏感数据泄露的技术解决方案。它们通过监控、检测和阻止敏感数据的传输来保护企业的信息资产。所以很多企业会选择DLP数据防泄密产品来保护数据安全。DLP数据防泄密产品的核心功能通常包括: 1、数据发现:DLP产品…

靶场合集

1.vulnhub很多安全竞赛都有在这里面出题,系列非常之多,不仅仅有web方面的,也有系统方面的渗透。 网上也有很多writeup,环境直接下载虚拟机压缩包,解压即可使用。新手朋友建议下载先自行测试,然后再看writeup解题 https://vulhub.org/(在线版) https://github.com/vulhu…

STM32Cube-10 | 使用ADC读取气体传感器数据(MQ-2)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的ADC外设,读取MQ-2气体传感器的数据并通过串口发送 本质就是ADC采集 MQ-2的原理图如下: 生成MDK工程 选择芯片型号 打开STM32CubeMX,打开MCU选择器:搜索并选中芯片STM32L431RCT6:配置时钟源如果选择使用外部高速时钟…

LCD屏显示图片习题【一】

解题的关键在于 显示图片的双重for循环条件与目标位置的结合,且该程序输入的坐标值为图片左上角像素点坐标目录LCD屏显示图片习题题目解析代码完整展示 LCD屏显示图片习题 题目解析 ​ 该题的显著要求有两个,一是任意位置,二是任意大小。为满足这两个要求得先读取并记录bmp数…

【ubuntu】程序运行时的任务栏图标

1. 快捷方式需要正确的配置StartupWMClass属性,那么如何获取这个属性呢?参考如下命令xprop | grep WM_CLASS将终端程序小窗运行上述命令,鼠标点击哪个应用窗体就会获取哪个窗体的名称,有可能会有多个,多个情况任选其一 2. 将图标复制到 /usr/share/pixmaps/ 中,文心一言的…

Visual Studio中的四款代码格式化工具

前言 今天大姚给大家分享四款Visual Studio中的代码格式化工具、扩展插件。大家可以在Visual Studio中的管理扩展或者插件市场下载安装。 代码格式化工具的作用 自动调整代码的布局和风格,以确保代码具有统一的格式,提高可读性并减少潜在的错误。 Visual Studio中的管理扩展插…

【译】使用 GitHub Copilot 作为你的编码 GPS

GitHub Copilot 是一个改变游戏规则的人工智能助手,可以彻底改变您在 Visual Studio 中的编码流程。GitHub Copilot 是一个改变游戏规则的人工智能助手,可以彻底改变您在 Visual Studio 中的编码流程。在我们的视频系列中,Bruno Capuano 探讨了这个智能编码伙伴如何帮助您更…

[转帖]mkcert

https://github.com/FiloSottile/mkcert mkcert is a simple tool for making locally-trusted development certificates. It requires no configuration.$ mkcert -install Created a new local CA 💥 The local CA is now installed in the system trust store! ⚡️ The …