Java设计模式 _创建型模式_原型模式(Cloneable)

news/2024/5/12 15:51:20

一、原型模式

1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作,可以提升性能。

2、实现思路:
(1)、需要克隆的实体类实现Cloneable接口
(2)、复写clone方法(当前对象本身可以不复写,如果当前对象被继承,需要clone子类,则必须要复写)

二、代码示例

1、基础示例:

import lombok.Data;
@Data
public class Rose implements Cloneable {private String name;public static void main(String[] args) throws CloneNotSupportedException {Rose rose = new Rose();rose.setName("玫瑰");System.out.println(rose);Rose clone = (Rose)rose.clone();System.out.println(clone);System.out.println(rose==clone);}
}

上运行结果:
在这里插入图片描述
可以看出,完整的复制了属性,且并不是同一个对象。实现了Cloneable接口的类可以直接用clone方法。

2、继承示例:

// 花抽象类
import lombok.Data;
@Data
public  abstract class Flower implements Cloneable{protected String name;public abstract String desc();public Object clone() {Object clone = null;try {clone = super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return clone;}
}
// 牡丹花类
public class Peony extends Flower {public Peony(){this.name = "peony";}@Overridepublic String desc() {return "牡丹花";}
}// 梅花类
public class Plum extends Flower {public Plum(){this.name = "plum";}@Overridepublic String desc() {return "梅花";}
}
// 测试类
public class Ztest {public static void main(String[] args) {Flower plum = new Plum();System.out.println(plum);Flower clone = (Flower) plum.clone();System.out.println(clone);System.out.println(plum==clone);}
}

运行结果:
在这里插入图片描述
可以看到运行结果,可以看到完成克隆,且并非同一个对象。子类在调用clone方法时,抽象父类中必须重写,否则无法调用。

学海无涯苦作舟!!!


http://www.mrgr.cn/p/71168237

相关文章

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址:Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本,作为经典分布式订阅、发布的消息传输中间件,kafka在实时数据处理、消息队列、流处理等领域具有广泛…

论文解读(MAML)《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks》

Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息论文标题:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks论文作者:Chelsea Finn、Pieter Abbeel、Sergey Levine论文来源:2017 论文地址:download 论文代码:download视屏讲解:click1-摘要…

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…

实验24-基于LSTM的实体提取

版本python3.6 tensorflow版本为tensorflow==1.14 运行结果:

实验25-基于sklearn构建One-hot词向量

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果:

实验26-1基于gensim构建word2vec词向量

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果:

什么是 Antimalware Service Executable,为什么它会在我的 PC 上运行?

Microsoft Defender Antivirus 是一种反恶意软件工具,其后台进程是“Antimalware Service Executable”。 两者都默认安装在 Windows 10 中。 这个软件,有时称为 MsMpEng.exe,是 Windows 操作系统的一部分。 在本文中,我们将深入并解释有关此 Windows 进程的所有信息。 什么…

实验22-4-jieba常用方法

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果:

后端开发的学习路线

所谓的后端开发,一般指的是后端服务器开发。针对服务器开发,可以用各种语言 Java、C++、PHP、Python、Go 都可以。 学习方向和路线很重要,比起具体的技术细节,可复制的经验、清晰的学习路线,是大部分人更加需要的东西。 朝着正确的方向努力,否则只会离目标越来越远,不是…

WPF 资源基础

动态资源/静态资源 UI代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/ex…

m考虑时偏影响的根升余弦滤波器matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要根升余弦滤波器(Root-Raised Cosine Filter, RRC Filter)是一种广泛应用在通信系统中的脉冲整形滤波器,特别是在数字调制传输系统中,用于消除码间干扰(Inter-Symbol Interference, ISI),确保符号边界清…

Java线程池让使用线程变得更加高效

使用一个线程需要经过创建、运行、销毁三大步骤&#xff0c;如果业务系统每个线程都要经历这个过程&#xff0c;那势必带来过多不必要的资源消耗。线程池就是为了解决这个问题而生&#xff0c;需要时就从池中拿取&#xff0c;使用完毕就放回去&#xff0c;池化思想通过复用对象…

EDevourer风险分析报告及典型用户

1.风险分析人: 客户/用户反馈多样性:由于用户群体可能包括不同年龄段、英语水平和游戏喜好的人群,因此他们的反馈可能多样化,需要花费更多精力去理解和整合这些反馈。 团队成员经验和技能:团队成员在游戏开发的时侯有可能会遇到许多bug或者遇到设想的功能无法实现,可能导…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…

C# 环境变量,在不同目录运行返回不同的值

why? System.Environment.GetEnvironmentVariable("SESSIONNAME");本文由 trykle 发布联系方式:QQ 294986636本文地址:https://www.cnblogs.com/trykle/p/18162480

实验20-智能换脸

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6: 运行结果:

Xcode for Mac:强大易用的集成开发环境

Xcode for Mac是一款专为苹果开发者打造的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它集成了代码编辑器、编译器、调试器等一系列开发工具&#xff0c;让开发者能够在同一界面内完成应用的开发、测试和调试工作。 Xcode for Mac v15.2正式版下载 Xcode支持多种编程…

Ubuntu+Systemd服务+实现开机自启/关机启动脚本

开机自启 1.创建一个新的 systemd 服务文件 现在随便一个地方创建txt文档 如果想要启动sh脚本&#xff0c;就把下面的代码输入到txt文档中 [Unit] DescriptionRun Python script on specific executable run Afternetwork.target[Service] Typesimple ExecStart/home/tech/…

DRF源码汇总

三大认证源码分析 simple-jwt源码分析 还差一个序列化类源码分析(在做了,会补的)DRF源码汇总 【一】三大认证【1】认证【2】权限【3】频率【3.1】SimpleRateThrottle源码分析【二】JWT 【1】simple-jwt 【1.1】登录【1.2】认证

docker部署SonarQube流程及相关问题汇总

环境说明:  sonarqube版本:10.4.1-community PostgreSql版本:14.1 系统环境:centos7.6(x86_64) 1、PostgreSql的安装部署 在docker中拉取最新版本镜像,命令如下:docker pull postgres 镜像拉取成功后执行如下命令创建PostgreSql容器:docker run --name postgres -e PO…