JAVA设计模式之【原型模式】

news2024/9/24 21:28:48

原型模式.png

快速构建对象方法:

使用简单工厂将get,set封装到某个方法中(Client类)
JDK提供实现Cloneable接口实现快速复制

1 类图

2 适用场景

1、类初始化消耗资源较多。
2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
3、构造函数比较复杂。
4、循环体中生产大量对象时。

3 原型模式案例

BeanUtils.copy();
JSON.parseObject()

4 深浅克隆

4.1 浅克隆

创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。

4.1.2 浅克隆代码案例

必须让目标类实现Cloneable接口,重写java.lang.Object的clone()

@Override
public Object clone() throws CloneNotSupportedException {
    return super.clone();
}

4.2 深克隆

创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

4.2.2 深克隆代码案例

@Override
public Object clone() throws CloneNotSupportedException {
    try {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(out);
        oos.writeObject(this);
        oos.close();
        //从内存中取出
        byte[] bb = out.toByteArray();
        ByteArrayInputStream in = new ByteArrayInputStream(bb);
        ObjectInputStream ois = new ObjectInputStream(in);
        Object clone = ois.readObject();
        ois.close();
        return clone;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

4.3 克隆会破坏单例模式

4.3.1 解决方式

要么单例类不实现Cloneable 接口;要么重写 clone()方法,在 clone 方法中返回单例对象即可。

@Override
protected Object clone() throws CloneNotSupportedException {
    return this.deepClone();
}

绿色软件搜索【谷丘Coder】后台发送【原型模式】获取笔记资料与思维导图

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

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

相关文章

Python selenium爬虫被检测到,该怎么破?

当使用Selenium进行网络爬虫操作时,经常会被目标网站检测到并采取了反爬措施,有几种方法可以尝试规避。 1、 用无头模式(Headless Mode):Selenium支持在无头浏览器模式下运行,这样就不会触发与真实用户操作…

Spring-AOP-API设计与实现

拦截篇-AOP怎么拦截类和方法 Joinpoint Joinpoint(连接点)是面向切面编程(Aspect-Oriented Programming, AOP)中的一个核心概念。在 Spring AOP 中,它主要指代的是应用程序中的某个特定点,在这个点上可以…

国产游戏技术:创新驱动下的全球影响力

国产游戏技术能否引领全球? 前言技术亮点:国产游戏的创新之路面临的挑战:技术创新与市场适应发展机遇:拥抱新技术,拓展国际市场IT技术创新:推动行业发展的新引擎人才需求:技术人才的紧缺与机遇结…

一个利用率超高的楼宇智能化实验室是如何练成的?

在当今快速发展的智能化时代,楼宇智能化实验室作为培养未来智能科技人才的重要基地,其利用率的高低直接关系到科研效率和成果产出。本文将详细探讨如何打造一个利用率超高的楼宇智能化实验室,从设计规划、设备选型、实训内容、管理运营等多个…

Git克隆仓库太大导致拉不下来的解决方法 fatal: fetch-pack: invalid index-pack output

一般这种问题是因为某个文件/某个文件夹/某些文件夹过大导致整个项目超过1G了导致的 试过其他教程里的设置depth为1,也改过git的postBuffer,都不管用 最后还是靠克隆指定文件夹这种方式成功把项目拉下来 1. Git Bash 输入命令 git clone --filterblob:none --sparse 项目路径…

解决pip install fitz 失败问题

背景 实现PDF转图片,需要使用fitz,结果安装的时候出现问题。 先上解决方案,再进行问题分析. 解决方案 安装PyMuPDF能直接使用fitz,按照介绍PyMuPDF也叫称为fitz库。 pip install PyMuPDF 问题分析 关键报错信息:…

WebRTC支持H.265编码:技术挑战与EasyCVR视频汇聚平台解决方案

随着互联网技术的快速发展,视频通信已成为人们日常生活和工作中不可或缺的一部分。WebRTC(Web Real-Time Communication)作为一种实时通信技术,因其便捷性和高效性而受到广泛关注。然而,在视频编码格式上,W…

武汉凯迪正大—三倍频发生器电源发生装置 倍频试验装置 多频装置

产品概述 武汉凯迪正大KDSF 感应耐压试验装置是根据国家标准《GB311-64》和原水电部发布的《电气设备预防性试验规程》,为满足电力系统对高压电压互感器、倍频感应耐压试验设备的要求而设计的,用于电力系统35-220KV等级电压互感器的交流耐压试验&#x…

证券行业加密业务安全风险监测与防御技术研究

摘要:解决证券⾏业加密流量威胁问题、加密流量中的应⽤⻛险问题,对若⼲证券⾏业的实际流量内容进⾏调研分析, 分析了证券⾏业加密流量⾯临的合规性⻛险和加密协议及证书本⾝存在的⻛险、以及可能存在的外部加密流量威 胁,并提出防…

详解Xilinx GTP结构原理以及验证

文章目录 一、GT简介二、GTP内部结构2.1 整体结构2.2 Quad的内部结构2.3 一对收发器的内部结构2.3.1 发送器的内部结构2.3.2 接收器的内部结构 三、时钟和复位3.1 输入的参考时钟结构3.1.1 IBUFDS_GTE2原语3.1.2 IBUFDS_GTE2原语端口属性说明 3.2 参考时钟选择和分配3.2.1 GTPE…

VScode + Python 下载及安装|python环境配置|中文乱码解决

1,下载安装VScode 直接点击2024.9https://vscode.download.prss.microsoft.com/dbazure/download/stable/fee1edb8d6d72a0ddff41e5f71a671c23ed924b9/VSCodeUserSetup-x64-1.92.2.exe 或者百度搜索VScode,可下载安装最新版 点击后等一下,就…

es、kibana及分词器的安装

文章目录 1、搜索引擎2、为什么使用新型搜索?3、底层原理:倒排索引4、底层API5、你使用了什么分词器?6、ElasticSearch安装6.1、准备目录并授予权限6.2、制作配置文件6.3、初始化es容器6.4、重置es用户密码6.5、安装中文分词器6.5.1、 把资料…

人机环境系统智能中的知己、趣时、变通

在易经中,知己、趣时、变通是重要的概念,它们在人机环境系统智能中的作用可以理解为: 知己:指的是对系统自身的深刻了解。在人机环境系统中,这意味着系统能够清晰地识别和理解自身的能力、限制以及用户的需求&#xff…

鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙中巧夺天工

gn是什么? gn 存在的意义是为了生成 ninja,如果熟悉前端开发,二者关系很像 Sass和CSS的关系. 为什么会有gn,说是有个叫even的谷歌负责构建系统的工程师在使用传统的makefile构建chrome时觉得太麻烦,不高效,所以设计了一套更简单,更高效新的构建工具gnninja,然后就被广泛的使用…

从数据生成到图数据库:Linux下Neo4j的CSV导入

文章目录 简介找到import文件夹准备csv表格数据导入neo4jTeacherStudent 简介 介绍如何在Linux系统中设置和使用Neo4j数据库。 首先,找到Neo4j的import文件夹,通常位于Neo4j安装目录下的data文件夹内,并展示通过neo4j.conf配置文件查找和修…

EmguCV学习笔记 C# 6.S 特别示例

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Datawhale AI夏令营 第五期 CV方向 Task1笔记

Task1:跑通YOLO方案baseline! 赛题解读 根据您提供的图片内容,这是一份关于城市管理违规行为智能识别竞赛的赛题描述。以下是对内容的分析: 一、赛题描述 背景:随着城市化进程的加速,城市管理面临新的挑…

JavaScript初级——获取元素的样式

1、获取元素当前的显示样式 语法:元素.currentStyle.样式名 可以用来读取当前元素正在显示的样式,如果当前的元素没有设置样式,则获取他的默认值 currentStyle只有IE8浏览器支持,其他的浏览器不支持。 2、在其他浏览器中&#xf…

修复 502 Bad Gateway 错误的 6 种方法

通常,我们在使用网站时可能会遇到一系列错误。有些非常常见,例如 404,有些则不太常见,例如 101。这些被称为 HTTP 状态代码。其中,502 错误是某种服务器错误。那么,让我们先了解一下 Bad Gateway 502 的含义…

JetBrains Rider 2024 for Mac/Win:跨平台.NET IDE集成开发环境的全面解析

JetBrains Rider 2024作为一款专为Mac和Windows用户设计的跨平台.NET IDE集成开发环境,以其强大的功能和卓越的性能,在.NET开发领域脱颖而出。这款IDE不仅集成了IntelliJ IDEA的代码编辑优势,还融合了ReSharper的C#开发体验,为开发…