java设计模式(四)原型模式(Prototype Pattern)

1、模式介绍:

原型模式(Prototype Pattern)是一种创建型设计模式,它允许对象在创建新实例时通过复制现有实例而不是通过实例化新对象来完成。这样做可以避免耗费大量的资源和时间来初始化对象。原型模式涉及一个被复制的原型对象,在这个模式中,要创建的对象通过请求原型对象来进行复制。

2、应用场景:

需要创建大量相似对象:当需要创建大量具有相似属性的对象时,使用原型模式可以避免重复的初始化工作,提高性能。
对象的创建开销较大:如果对象的创建开销很大,例如读取数据库或文件操作,使用原型模式可以节省时间。
动态配置对象:当需要动态配置对象时,可以先创建一个原型对象,然后通过复制来生成新的对象并根据需要进行修改。

3、优点:

减少对象初始化开销:避免了重复的初始化工作,提高了对象创建的效率。
简化对象的创建:无需关心对象的具体创建过程,只需通过复制原型对象来生成新对象。
动态配置对象:可以通过复制原型对象来动态配置新对象,增加灵活性。

4、缺点:

深拷贝问题:原型模式需要确保对象的属性都能被正确复制,特别是对于复杂对象来说,需要注意深拷贝和浅拷贝的问题。
类必须实现克隆接口:要使用原型模式,类必须实现克隆方法,这在某些情况下可能是不可行的。

5、代码实现:

/*** 实现 Cloneable 接口的原型类** @author FM_南风* @date 2024/6/23*/
@Data
public class Shape  implements Cloneable {private String type;@Overridepublic Shape clone() {try {return (Shape) super.clone();} catch (CloneNotSupportedException e) {return null;}}
}/*** 具体原型类** @author FM_南风* @date 2024/6/23*/
public class Rectangle extends Shape {public Rectangle() {setType("Rectangle原型类");}
}/*** 具体原型类** @author FM_南风* @date 2024/6/23*/
public class Circle extends Shape {public Circle() {setType("Circle原型类");}
}/*** 应用** @author FM_南风* @date 2024/6/23*/
public class PrototypeClient {public static void main(String[] args) {Shape rectangle = new Rectangle();Shape circle = new Circle();// 使用原型对象创建新对象Shape clonedRectangle = rectangle.clone();Shape clonedCircle = circle.clone();System.out.println(clonedRectangle.getType()); System.out.println(clonedCircle.getType()); }
}

6、结果展示:

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

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

相关文章

ES6模板字符串详解

ES6是JavaScript语言的一次重大更新,引入了许多新特性和语法改进,其中模板字符串是一个非常实用和灵活的语法特性。它可以让我们从数组或对象中提取值,并赋给对应的变量,让代码变得更加简洁和易读。 本文将深入探讨ES6解构赋值的语…

域控制器BSP开发工程师面试题

在域控制器BSP(Board Support Package)开发工程师的面试中,可能会遇到以下一些问题。以下是根据参考文章和相关知识整理的面试题及其可能的回答格式: 面试题1:请简要介绍一下您对域控制器BSP的理解。 回答: 域控制器BSP,即板卡支持包,是嵌入式系统开发中的关键组成部…

Nginx开发--动静分离和URLRewrite

05 【动静分离和URLRewrite】 1.动静分离介绍 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存&#xff…

减少液氮罐内液氮损耗的方法

监测与管理液氮容器的密封性能 液氮容器的密封性能直接影响液氮的损耗情况。一个常见的损耗源是容器本身的密封不良或老化导致的泄漏。为了有效减少液氮损耗,首先应当定期检查液氮容器的密封性能。这可以通过简单的方法如肉眼检查外观,或者更精确的方法…

KALI LINUX 开启ssh免登录服务及固定ip及

SSH以进行远程登录 在Kali Linux中启用SSH以进行远程登录,请按照以下步骤操作: 安装SSH服务:sudo apt update sudo apt install openssh-server 已安装可忽略 sudo systemctl start ssh 启动SSH服务 sudo systemctl enable ssh 确保SSH服务设置为开机启动: (可选)如…

xxl-job 分布式任务调度 基本使用

xxl-job 是一个分布式任务调度平台,使用非常方便。 官网:https://gitee.com/xuxueli0323/xxl-job 工作原理类似于nacos 执行器注册到调度中心 调度中心分配任务 执行器执行任务 docker-compose 配置 version: 3 services:xxl-job:image: xuxueli/xxl-…

科普文:外贸垃圾邮件判定

国外垃圾邮件判定规则 很多时候,外贸的沟通多以邮件为主,他们作为专业的采购商,每天邮箱里都会塞满了邮件。因此,为了提高工作效率,很多国外客户喜欢使用垃圾邮件过滤器来过滤掉一部分垃圾邮件。 以下几种情况会触发垃…

《重构》读书笔记【第1章 重构,第一个示例,第2章 重构原则】

文章目录 第1章 重构,第一个示例1.1 重构前1.2 重构后 第2章 重构原则2.1 何谓重构2.2 两顶帽子2.3 为何重构2.4 何时重构2.5 重构和开发过程 第1章 重构,第一个示例 我这里使用的IDE是IntelliJ IDEA 1.1 重构前 plays.js export const plays {&quo…

【学习笔记】ElasticSearch

中文社区:https://elasticsearch.cn/ Cluster集群,一个ES集群由一个或多个节点(Node)组成,每个集群都有一个Cluster Name作为标识 Node节点,一个ES实例就是一个node,一个机器可以有多个实例&a…

工具提示框(Tooltip): 设计、应用与最佳实践

工具提示框(Tooltip): 设计、应用与最佳实践 引言 工具提示框(Tooltip)是用户界面(UI)设计中的一种常见元素,它为用户提供关于界面元素或操作的额外信息。当用户将鼠标悬停在某个元素上时,Tooltip会以文本形式显示相关信息,帮助用户更好地理解和使用界面。本文将探讨…

AcWing算法基础课笔记——高斯消元

高斯消元 用来求解方程组 a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a 2 n x n b 2 … a n 1 x 1 a n 2 x 2 ⋯ a n n x n b n a_{11} x_1 a_{12} x_2 \dots a_{1n} x_n b_1\\ a_{21} x_1 a_{22} x_2 \dots a_{2n} x_n b_2\\ \dots \\ a…

Android 使用cmd wifi命令操作wifi

cmd wifi 命令完整的说明说下。 console:/ # cmd wifi Wi-Fi (wifi) commands:help or -hPrint this help text.get-country-codeGets country code as a two-letter stringset-wifi-enabled enabled|disabledEnables…

论文导读 | Manufacturing Service Operations Management近期文章精选

编者按 在本系列文章中,我们梳理了顶刊Manufacturing & Service Operations Management5月份发布有关OR/OM以及相关应用的文章之基本信息,旨在帮助读者快速洞察行业/学界最新动态。 推荐文章1 ● 题目:Robust Drone Delivery with Weath…

【C++题解】1712. 输出满足条件的整数2

问题:1712. 输出满足条件的整数2 类型:简单循环 题目描述: 有这样的三位数,其百位、十位、个位的数字之和为偶数,且百位大于十位,十位大于个位,请输出满所有满足条件的整数。 输入&#xff1…

#05搜索法

要点: ①搜索法:穷举搜索、深度优先搜索、广度优先搜索、广深结合搜索、回溯法、分支限界法; ②解空间树:子集树、排列树、满m叉树。 ③回溯法及分支限界法求解问题的方法与步骤。 难点: 子集树、排列树和满m叉树…

小程序下拉刷新,加载更多数据,移动端分页

文章目录 页面结构图WXML页面代码js代码wxss代码总结备注 参考&#xff1a;https://juejin.cn/post/7222855604406796346 页面结构图 一般页面就4个结构&#xff1a;最外滚动层、数据展示层、暂无数据层、没有更多数据层。 如图&#xff1a; WXML页面代码 <scroll-view …

前端:Vue中使用JS-Cookie

在我们构建Vue站点时候&#xff0c;可能需要使用 cookie 来记录用户信息或者偏好设置&#xff0c;我们可以引入第三方库 GitHub - js-cookie/js-cookie: A simple, lightweight JavaScript API for handling browser cookies 来方便地操作 cookie。接下来我们就来一步一步地实…

Golang | Leetcode Golang题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; func hammingWeight(num uint32) (ones int) {for ; num > 0; num & num - 1 {ones}return }

# Kafka_深入探秘者(5):kafka 分区

Kafka_深入探秘者&#xff08;5&#xff09;&#xff1a;kafka 分区 一、kafka 副本机制 1、Kafka 可以将主题划分为多个分区(Partition)&#xff0c;会根据分区规则选择把消息存储到哪个分区中&#xff0c;只要如果分区规则设置的合理&#xff0c;那么所有的消息将会被均匀的…

CesiumJS【Basic】- #014 Entity和Primitive的flyTo

文章目录 Entity和Primitive的flyTo1 目标2 实现2.1 实体对象定位2.2 图元对象定位Entity和Primitive的flyTo 1 目标 实体对象和图元对象定位 2 实现 2.1 实体对象定位 实体对象定位可以使用Cesium.Viewer的flyTo方法。由于target参数可以是一个Entity,所以直接调用即可。…