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

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。

这个可以省略new的过程,不需要重新执行构造函数。

 浅复制与深复制

浅复制’,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。深复制把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。”对于引用类型的数据,比如类或者引用,会将原型生成的新实例指向被复制的实例,新旧实例的引用类型数据指向的是同一个。

// 原型接口
public interface Prototype {// 克隆方法Prototype clone();
}// 具体原型类
public class ConcretePrototype implements Prototype {private String name;public ConcretePrototype(String name) {this.name = name;}public String getName() {return name;}// 实现克隆方法@Overridepublic ConcretePrototype clone() {try {// 使用浅拷贝return (ConcretePrototype) super.clone();} catch (CloneNotSupportedException e) {throw new Error("Clone not supported");}}
}// 客户端代码
public class Client {public static void main(String[] args) {// 创建原型对象Prototype prototype = new ConcretePrototype("Prototype 1");// 克隆原型对象Prototype clonedPrototype = prototype.clone();// 修改克隆对象的属性clonedPrototype.getName(); // 输出 "Prototype 1"// 原型对象属性没有改变prototype.getName(); // 输出 "Prototype 1"// 如果需要深拷贝,则需要在 clone 方法中手动复制所有需要深拷贝的字段}
}

实现深拷贝(大话设计模式中)

工作经历类是简历类的成员变量,此为实现工作经历类的深拷贝

1、工作经历类实现克隆方法

2、简历类创建参数为工作经历类的构造函数,构造函数中克隆工作经历类

3、在简历类克隆方法中,通过先初始化工作简历类的构造方法创建新的简历类,再复制其它值类参数,最终返回深拷贝的简历类

 

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

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

相关文章

图片如何降低kb?这个方法很方便

图片体积过大的话,有两种最简单的方法可以解决,最直接的就是压缩图片大小,降低图片kb,再就是修改图片尺寸让图片体积变小,这两种操作方式都可以在本文介绍的这款图片处理工具中完成,图片压缩对我们来说最主…

ClickHouse 指南(三)最佳实践 -- 稀疏主索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中,我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…

「递归算法」:求根节点到叶节点数字之和

一、题目 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数…

三防平板丨三防平板电脑丨三防加固平板丨智能化应用

随着信息技术和智能化技术的不断发展,越来越多的行业开始采用三防平板作为工具和设备,以提高生产效率和工作质量。下面,我将详细介绍三防平板在智能化行业中的应用。 首先,三防平板在制造业中有着广泛的应用。制造业是一个需要精密…

java——IO流基础

目录 IO流IO流的四大分类:IO流的体系:FileinputStream(文件字节输入流)FileOutputStream(文件字节输出流)文件复制资源释放FileReader(文件字符输入流)FileWriter(文件字符输出流)缓…

JVM虚拟机结构

虚拟机结构图 从图中看出: JVM虚拟机主要有三大部分组成: 1. 类加载器 2. JVM运行时内存 3. 执行引擎 一、类加载器 类加载器主要用来加载字节码文件(.class)到内存中 二、内存结构 如图:可将内存分为两大部分&…

Linux系统性能分析(top,iostat,free)

top Linux系统中,Top命令主要用于实时运行系统的监控,包括Linux内核管理的进程或者线程的资源占用情况。 这个命令对所有正在运行的进程和系统负荷提供不断更新的概览信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的内容使用情况…

js设计模式:策略模式

作用: 根据不同的条件去进行相应的业务逻辑处理 就好比针对每种情况都制定对应的方案,触发条件就启动某项方案策略 示例: //策略对象const arrangeFun {model1:(value1,value2,value3,value4)>{return ${value1}${value2}${value3}:${value4}},model2:(value1,value2,va…

HubSpot出海营销的优势有哪些?

HubSpot在出海营销方面的优势可以更为详细地分析如下: 全球化功能支持: HubSpot的多语言支持和多地区适配功能,使得企业能够在不同国家和地区进行营销活动,而不必担心语言和文化差异的障碍。 通过全球化的模板和内容管理系统&a…

微信小程序 --- wx.request网络请求封装

网络请求封装 网络请求模块难度较大,如果学习起来感觉吃力,可以直接学习 [请求封装-使用 npm 包发送请求] 以后的模块 01. 为什么要封装 wx.request 小程序大多数 API 都是异步 API,如 wx.request(),wx.login() 等。这类 API 接口…

后端经典面试题合集

目录 1. Java基础1-1. JDK 和 JRE 和 JVM 分别是什么,有什么区别?1-2. 什么是字节码?采用字节码的最大好处是什么? 1. Java基础 1-1. JDK 和 JRE 和 JVM 分别是什么,有什么区别? JDK 是Java开发工具包&am…

实现Slider 滑块组件标记动态变化

实现以上效果&#xff0c;下拉框、slider滑块、按钮都在同一行&#xff0c;设置flex布局后&#xff0c;发现silider滑块最右边的标记数字一直都如下竖着显示&#xff0c;后来通过给源组件的标记区.el-slider__marks-text增加一个宽度后解决该问题。 <template><div>…

基于PID控制器的直流电机位置控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 1. PID控制器原理 2. 位置控制环 5.完整工程文件 1.课题概述 基于PID控制器的直流电机位置控制系统。直流电机位置控制系统是工业自动化领域中的一个重要应用。为了实现精确的位置控制&#xff0c;常采…

模板注入 [WesternCTF2018]shrine1

打开题目 直接查看源代码 发现注册了一个名为FLAG的config&#xff0c;这里可能有flag&#xff0c; 存在flask-jinja2模板注入&#xff0c; 并且存在黑名单过滤 输入shrine/{{7*7}}验证成功 通过url_for()与globals()函数&#xff0c;绕过黑名单 /shrine/{{url_for.__globa…

线程安全基础

文章目录 概要线程安全的三个体现一 、原子性二 、可见性三 、有序性 小结 概要 什么是线程安全&#xff1f;&#xff1f;&#xff1f; 当多个线程访问某个类时&#xff0c;不管运行时环境采用 何种调度方式 或者这些进程将如何交替执行&#xff0c;并且在主调代码中不需要任…

线性规划--状态转移(打家劫舍)

打家劫舍I 1.题目 2.思路 要解决这个问题&#xff0c;我们可以使用动态规划的方法。我们将问题分为两个子问题&#xff1a;偷窃前n-1家或者偷窃前n-2家。如果我们选择偷窃第n家&#xff0c;那么我们就不能偷窃第n-1家&#xff0c;因为它们是相邻的。所以&#xff0c;我们可以…

UnityWebGL 设置全屏

这是Unity导出Web默认打开的页面尺寸 修改后效果 修改 index.html 文件 1.div元素的id属性值为"unity-container"&#xff0c;宽度和高度都设置为100%&#xff0c;意味着该div元素将占据整个父容器的空间。canvas元素的id属性值为"unity-canvas"&#xff…

网卡本质,网络发展(局域网,广域网概念)

目录 引入 网卡的本质 网络的发展 引入 早期 局域网LAN&#xff08;Local Area Network&#xff09; 广域网WAN&#xff08;Wide Area Network&#xff09; 注意 引入 前面我们已经学习了很多关于linux系统的知识,其中文件系统和线程尤为繁杂 而网络其实也算系统的一部…

嵌入式学习-qt-Day4

嵌入式学习-qt-Day4 一、思维导图 二、作业 1.设计一个界面&#xff1a;显示系统时间&#xff1b;可以设置闹钟&#xff0c;在设置的时间到达后&#xff0c;显示五次字符串&#xff0c;并且语音播报。 Wight.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget>…

Day 1.进程的基本概念、相关命令、函数结口

进程基本概念 一、进程&#xff1a; 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程&#xff0c;包括进程的创建、进程的调度、进程的消亡 二、进程相关的命令 1.top 动态查看当前系统中所有的进程信息&#xff08;根据CPU…