创建型设计模式之Prototype(原型)

创建型设计模式之Prototype(原型)

摘要:
Prototype(原型)设计模式通过复制现有对象来创建新对象,避免重复初始化操作。该模式包含Prototype接口声明克隆方法、ConcretePrototype实现具体克隆逻辑,以及Client客户端调用克隆操作。示例代码展示了Product类实现Prototype接口,通过clone()方法复制对象属性。这种模式适用于创建成本较高的对象,能提高性能并简化对象创建过程。(149字)
1)意图

用原型实例是指定创建对象的种类,并且通过复制这些原型创建新的对象

2)结构

其中:

  • prototype声明一个复制自身的接口。
  • ConcretePrototype时效件一个复制的自身的操作。
  • Client 让一个原型复制自身从而创建一个新的对象。

3)适用性

Prototype 模式适用于:

  • 当一个系统应该独立于它的产品创建、构成和表示时。
  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载。
  • 为了避免创建一个与产品类层次平行的工厂类层次时。
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些。
    在这里插入图片描述
public class PrototypeDemo {public static void main(String[] args) {Product product = new Product(1, "原型设计模式");System.out.println(product.getId() + "->" + product.getName());Product product1 = (Product) product.clone();System.out.println(product1.getId() + "->" + product1.getName());}
}interface Prototype{Object clone();
}class Product implements Prototype{private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Product() {}public Product(int id, String name) {this.id = id;this.name = name;}@Overridepublic Object clone() {Product object = new Product();object.id = this.id;object.name = this.name;return object;}
}

喜欢我的文章记得点个在看,或者点赞,持续更新中ing…

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spark在执行中如何选择shuffle策略

目录 1. SortShuffleManager与HashShuffleManager的选择2. Shuffle策略的自动选择机制3. 关键配置参数4. 版本差异(3.0+新特性)5. 异常处理与调优6. 高级Shuffle服务(CSS)1. SortShuffleManager与HashShuffleManager的选择 SortShuffleManager:默认使用,适用于大规模数据…

AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC

AUTOSAR高级驾驶辅助系统与车辆运动控制接口详解 基于AUTOSAR R22-11标准的ADAS与VMC接口规范解析 目录 1. 引言2. 术语和概念说明 2.1 坐标系统2.2 定义 2.2.1 乘用车重心2.2.2 极坐标系统2.2.3 车辆加速度/推进力方向2.2.4 倾斜方向2.2.5 方向盘角度2.2.6 道路变量2.2.7 曲率…

26考研——文件管理_文件目录(4)

408答疑 文章目录 二、文件目录1、目录的作用与结构1.1、目录的基本概念1.2、目录的组织形式1.2.1、单级目录结构1.2.2、两级目录结构1.2.3、多级(树形)目录结构1.2.4、无环图目录结构 1.3、目录的实现方式1.3.1、线性列表1.3.2、哈希表 2、文件共享与链…

Maven 项目中集成数据库文档生成工具

在 Maven 项目中,可以通过集成 数据库文档生成工具(如 screw-maven-plugin、mybatis-generator 或 liquibase)来自动生成数据库文档。以下是使用 screw-maven-plugin(推荐)的完整配置步骤: 1. 添加插件配置…

WebSocket指数避让与重连机制

1. 引言 在现代Web应用中,WebSocket技术已成为实现实时通信的重要手段。与传统的HTTP请求-响应模式不同,WebSocket建立持久连接,使服务器能够主动向客户端推送数据,极大地提升了Web应用的实时性和交互体验。然而,在实…

本地部署AI工作流

🧰 主流 RAG / 工作流工具对比表(含是否免费、本地部署支持与资源需求) 工具名类型是否支持 RAG可视化目标用户是否免费支持本地部署本地部署一般配置Dify企业级问答系统平台✅✅非技术 & 企业用户✅ 免费版 商业版✅ 支持2C4G 起&…

React 第五十节 Router 中useNavigationType的使用详细介绍

前言 useNavigationType 是 React Router v6 提供的一个钩子,用于确定用户如何导航到当前页面。 它提供了关于导航类型的洞察,有助于优化用户体验和实现特定导航行为。 一、useNavigationType 核心用途 1.1、检测导航方式: 判断用户是通过…

4.2.3 Spark SQL 手动指定数据源

在本节实战中,我们学习了如何在Spark SQL中手动指定数据源以及如何使用format()和option()方法。通过案例演示,我们读取了不同格式的数据文件,包括CSV、JSON,并从JDBC数据源读取数据,展示了如何将这些数据转换为DataFr…

【AUTOSAR OS】计数器Counter机制解析:定义、实现与应用

一、Counter的定义与作用 在AUTOSAR Classic Platform(CP)中,**Counter(计数器)**是系统实现时间管理的核心组件,用于测量时间间隔、触发报警(Alarm)和调度表(Schedule …

在机器视觉测量和机器视觉定位中,棋盘格标定如何影响精度

棋盘格标定是机器视觉(尤其是基于相机的系统)中进行相机内参(焦距、主点、畸变系数)和外参(相机相对于世界坐标系的位置和姿态)标定的经典且广泛应用的方法。它的质量直接、显著且多方面地影响最终的视觉测量和定位精度。 以下是棋盘格标定如何影响精度的详细分析: 标定…

SOC-ESP32S3部分:21-非易失性存储库

飞书文档https://x509p6c8to.feishu.cn/wiki/QB0Zw7GLeio4l4kyaWQcuQT3nZS 非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据。 它允许我们在芯片的闪存中存储和读取数据,即使在断电后,这些数据也不会丢失。 NVS 是 ESP32 flash&#xff…

让大模型看得见自己的推理 — KnowTrace结构化知识追踪

让大模型“看得见”自己的推理 —— KnowTrace 结构化知识追踪式 RAG 全解析 一句话概括:把检索-推理“改造”成 动态知识图构建任务,再让 LLM 只关注这张不断精炼的小图 —— 这就是显式知识追踪的核心价值。 1. 背景:为什么 RAG 仍难以搞定多跳推理? 长上下文负担 传统 I…

新版智慧景区信息化系统解决方案

该智慧景区信息化系统解决方案以云 + 大数据 + 物联网技术为核心,秉持 “汇聚联合,突显数据隐性价值” 理念,通过数据融合、业务融合、技术融合,构建 “营销、服务、管理” 三位一体模式。方案涵盖智慧票务、智能入园、精准营销、景区管理(如用电安全监测、森林防火、客流…

人工智能在智能健康监测中的创新应用与未来趋势

随着人们健康意识的不断提高和医疗资源的日益紧张,智能健康监测作为一种新兴的健康管理方式,正在迅速发展。人工智能(AI)技术通过其强大的数据分析和预测能力,为智能健康监测提供了重要的技术支持。本文将探讨人工智能…

python打卡day40

知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 导入包 # 先继续之前的代码 import torch …

系统性学习C语言-第十二讲-深入理解指针(2)

系统性学习C语言-第十二讲-深入理解指针(2) 1. const 修饰指针1.1 const 修饰变量1.2 const 修饰指针变量 2. 野指针2.1 野指针成因2.2 如何规避野指针2.2.1 指针初始化2.2.2 小心指针越界2.2.3 指针变量不再使用时,及时置 NULL &…

《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析

集合(Set)—— 最基础的数学容器 定义: 集合是由确定的、互不相同的对象(称为元素)组成的整体。 表示方法: 列举法:A {1, 2, 3} 描述法:B {x | x > 0}(表示所有大于…

Spring Boot整活指南:从Helo World到“真香”定律

📌 一、Spring Boot的"真香"本质(不是996的福报) 你以为Spring Boot只是个简化配置的工具?Too young!它其实是程序员的​​摸鱼加速器​​。 ​​经典场景还原​​: 产品经理:“这个…

打字练习:平台推荐

1.打字练习 . 1)平台推荐 下面推荐两个打字练习平台 Keybr:https://www.keybr.com/ TypingClub:https://www.edclub.com/sportal/ . 2)平台对比 特性KeybrTypingClub核心优势AI智能弱项训练结构化课程体系适合人群开发者/…

ASP.NET Core 中JWT的基本使用

文章目录 前言一、JWT与RBAC二、JWT 的作用三、RBAC 的核心思想四、使用1、配置文件 (appsettings.json)2、JWT配置模型 (Entity/JwtSettings.cs)3、服务扩展类,JWT配置 (Extensions/ServiceExtensions.cs)4、用户仓库接口服务5、认证服务 (Interface/IAuthService.…