设计模式学习笔记九:原型模式(和深浅复制)

实战指南:基于华为Ascend NPU的大模型W8A8量化调优与精度提升 本文提供了一份基于华为Ascend NPU进行大模型W8A8量化的实战调优指南。详细介绍了从环境搭建、使用msmodelslim框架进行基础量化,到通过离群值抑制、校准集优化和量化回退等关键技术提升精度的全流程。旨在帮助开发者在华为NPU硬件上实现模型推理的显著加速,同时有效控制精度损失。 阅读详情
原型设计模式是一个比较简单的设计模式,创建型模式的一种。主要作用是实现对象的自我复制。在实现上大多采用实现JDK中的Cloneable接口。适用场景同它的作用,也就是需要进行对象拷贝的情况。

        在属性拷贝过程中,本例子实现了两种方式:浅复制和深复制。代码如下:


package com.array7.prototype;

import java.io.*;

/**
 * 调用
 */
public class Run {
    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
        // 构造一个带引用的对象
        ProtoType p1 = new ProtoType(new Pojo("array7", 27));
        // 浅层复制,只复制引用
        ProtoType p2 = p1.clone();
        // 深层复制,创建一个完全一样的对象。包含子对象。
        ProtoType p3 = p1.deepClone();
        // 修改名称
        p1.getPojo().setName("Jackson");
        System.out.println(p2.getPojo().getName()); // result is Jasckson
        System.out.println(p3.getPojo().getName()); // result is array7
    }

}

/**
 * 如果要使用流的方式一定需要实现序列化接口
 */
class Pojo implements Serializable {
    private String name;
    private int age;

    public Pojo(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

/**
 * 如果要使用流的方式一定需要实现序列化接口
 */
class ProtoType implements Cloneable, Serializable {
    private Pojo pojo;
    public ProtoType(Pojo pojo) {
        this.pojo = pojo;
    }

    public Pojo getPojo() {
        return pojo;
    }

    public void setPojo(Pojo pojo) {
        this.pojo = pojo;
    }

    /**
     * 浅复制
     *
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public ProtoType clone() throws CloneNotSupportedException {
        ProtoType protoType = (ProtoType) super.clone();
        return protoType;
    }

    /**
     * 深复制
     * 深复制的实现也可以使用其他的方式,
     *  比如:
     *      1. 使用apache BeanUtils类中的copyproperties静态方法;
     *      2. 自己反射实现。简单的对象自己实现性能上应该会好一些,复杂对象的话工作量会非常庞大,性能方面也未必有开源lib好。
     *      3. ......
     *  方法不只一种,根据自己的情况选择。
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public ProtoType deepClone() throws IOException, ClassNotFoundException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        new ObjectOutputStream(bos).writeObject(this);
        return (ProtoType) new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray())).readObject();
    }
}


电工识图入门:从电气符号到控制逻辑的完整指南 电工图纸是电气工程领域的通用语言,无论是设备安装、线路检修还是系统设计,看不懂图纸就像航海没有海图。很多初学者面对复杂的电气符号和线路走向感到无从下手,实际上只要掌握正确的识图方法,就能从简单的照明电路逐步过渡到复杂的自动化控制系统。 本文将从最基础的电气符号和图纸类型讲起,通过实际图纸案例解析,带你建立完整的识图逻辑。你将学会如何区分主回路和控制回路,如何追踪电流路径,以及如何结合图纸进行故障排查。无论你是电工新手、设备维护人员还是相关专业学生,这套方法都能帮你快速提升图纸理解能力。 1. 电气图纸基础: 阅读详情

相关推荐

保姆级教程:用STM32CubeMX给STM32F407配置RTC秒中断,并解决掉电时间丢失问题

本文详细介绍了如何使用STM32CubeMX为STM32F407配置RTC秒中断,并解决掉电时间丢失问题。通过硬件原理与软件配置的双视角解析,帮助开发者实现精确计时与时间持久化,适用于物联网设备和工业控制器等场景。

weixin_42519733的博客 137

设计模式学习笔记:原型模式以及深浅拷贝的区别

原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的Object clone()就是原型模式的应用。 一、原型模式介绍# 原型设计模式(Prototype Design Pattern)指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在Java语言中就存在克隆的方式,比如浅拷贝和深拷贝。 对于一

lyl54545的博客 848

[c语言]用辗转相除法求最大公约数,递归和不递归两种

在c语言的学习中必然会遇到求两个数之间的最大公约数的题目,那么对于其他经典方法,最简便快捷的方式就是利用辗转相除法 辗转相除法又叫做欧几里得算法,目的是为了求两个正整数的最大公约数 定理:gcd(a,b) = gcd(b ,a%b) //在这里用(a,b)表示a和b的最大公约数证明:a可以表示成a = kb + r,则r = a %b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r //这里的"|"的意思是 :d是b的因数 ,d是a的因数 因此d...

ZZRBlogger的博客 1万+

设计模式学习笔记(六)原型模式以及深浅拷贝的区别

原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的Object clone()就是原型模式的应用。 一、原型模式介绍 原型设计模式(Prototype Design Pattern)指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在Java语言中就存在克隆的方式,比如浅拷贝和深拷贝。 对于一般的对象

hello_1566的博客 293

win11本地部署openclaw实操第1集

OpenClaw 是一款开源、本地优先、可自托管的 AI 智能体(AI Agent)网关 / 自动化框架,核心是让 AI 从 “只聊天、给建议” 变成 “能在你电脑上真做事” 的数字助手。

weixin_44626085的博客 7131

QT5.14.2离线安装包保姆级教程:断网、选组件、避坑全记录

本文详细介绍了QT5.14.2离线安装包的完整流程,特别针对Windows平台开发者提供断网安装、组件选择及避坑指南。作为QT5系列中最后一个免费离线版本,5.14.2具有免注册、全组件离线安装等独特优势,是开源开发者的理想选择。文章涵盖从环境准备到安装后配置的全方位指导,帮助开发者高效完成安装并避免常见问题。

weixin_30924087的博客 579

原型模式 java 深浅_java学习笔记之原型模式及深浅拷贝

一、原型模式的基本介绍在聊原型模式之前,我们来思考一个小问题,传统的方式我们是如何克隆对象呢?那我们以多利羊(Sheep)为例,来说明上述这个问题,具体代码见下面:多利羊(Sheep)public class Sheep {private String sname;private Date birthday;public Sheep(String sname, Date birthday) {t...

weixin_32998219的博客 172

PMSM控制系列文章进阶-8.电流、角度采样及其同步

摘要:本文分析了高低压电机在电流和角度采样中的不同方案选择。高压电机采用霍尔传感器和旋变进行隔离采样,低压电机则使用shunt电阻和磁编码器以降低成本。重点讨论了采样时间补偿问题:电流采样需与PWM周期同步,角度采样需考虑传感器延迟;通过park变换和反park变换时需补偿采样与发波的时间差,提出了通过测试母线电流或Ud变化来验证补偿时间准确性的方法。文中还介绍了对传感器信号进行软解码处理的方法,包括消除直流偏置、增益误差和正交误差等参数的自学习过程。

weixin_41343701的博客 614

学习笔记【23种设计模式-第四节:Prototype原型模式 -克隆羊、深浅拷贝】

Prototype原型模式 简述: 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。 原型模式是一种创建型设计模式,允许一个对象再创建另一个可定制的对象,无需知道如何创建的细节。 工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即对象.clone() 形象的理解:孙悟空拔出猴毛,变出其他孙猴子。 例子:克隆羊: Sheep类实现了Cloneable接口,重写了clone方法: p

qq_53273362的博客 213

Unreal5从入门到精通之如何在VR中使用3DUI

前面我们讲过《Unreal5从入门到精通之UMG的使用》一般制作游戏时,UI都是添加到屏幕视窗上面的,但是在制作VR时,我们往往需要制作一个3D的UI,放置在场景中,然后使用手柄的射线来和UI进行交互。今天我们就来讲解下,如何在VR中创作和交互3DUI首次操作会感觉好复杂,多多练习,当你熟悉了UE蓝图的操作后会发现,这只是一个常规的蓝图操作而已。祝大家在虚幻的学习过程中非常顺利。希望这篇博客对你有所帮助。

TxNet 1989

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2189

小滴课堂-学习笔记:(5)创建型设计模式 建造者+原型模式的应用场景

愿景:"让编程不再难学,让技术与生活更加有趣" 更多架构课程请访问 xdclass.net 目录 第1集 创建型设计模式-Prototype原型设计模式实战《上》 第2集 创建型设计模式-Prototype原型设计模式实战《下》 第3集 创建型设计模式-建造者模式应用介绍《上》 第4集 创建型设计模式-建造者模式应用介绍《下》 干货文档 第1集 创建型设计模式-Prototype原型设计模式实战《上》 简介:讲解原型设计模式介绍和应用场景《上》 原型设计模式Protot...

dev666的博客 291

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

学习笔记(13):第2章 架构师内功心法之设计模式 -原型模式的优缺点及小结

不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。 我们把设计模式作为一个专题,主要是学习设计模式是如何总结经验的,把经验为自己所用。学设计模式也是锻炼将业务需求转换技术实现的一种非常有效的方式。 本章内容将按照创建型模式(工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式)、结构...

weixin_43222122的博客 249

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

构建之法 学习笔记07

在之前长时间的理论学习之后,这周也快到学期期末了,结合本书第十章 10.2用例(USE CASE)与我的java设计模式课程作业,我对我的原型模式课题稍做了一些研究。 和典型人物、典型场景的方法类似,用例(UseCase)也是很常用的需求分析工具。用例有这样一些基本元素: 标题:描述这个用例要达到的目标 角色(Actor):和软件系统交互的角色,例如用户,其他实体,甚至时间(在描...

weixin_30333885的博客 111

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深入剖析 Java 中的深拷贝与浅拷贝:原理、实现与最佳实践

本文系统讲解了Java中深拷贝与浅拷贝的核心概念与实现方式。浅拷贝仅复制基本类型和引用地址,效率高但共享引用对象;深拷贝递归复制所有引用对象,实现完全数据隔离但性能较低。文章详细介绍了通过Cloneable接口、序列化、手动拷贝及第三方工具(如Apache Commons Lang、Gson)实现深浅拷贝的方法,并对比了性能差异。针对常见误区提供了避坑指南,最后结合原型模式演示了深浅拷贝的实际应用场景。本文包含大量可运行的代码示例,适合Java开发者系统学习对象拷贝这一核心知识点。

HRDMN的博客 1093

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

23种设计模式简述

适用场景:1. 对象创建代价高,创建逻辑复杂;2. 不清楚具体子类,但存在现成对象,可以直接克隆(比如CAD的clone接口)。给对象提供中介,外部不直接访问真是对象,而是先访问代理对象,由代理对象决定访问权限、访问时机。把一个复杂对象的构建过程拆开,一步一步构造,这样同样的构建过程可以生成不同表示的对象。适用场景:1. 图形对象导出、打印、计算面积;适用场景:1. 对象之间有明显的树形层级结构;在不暴露对象内部实现的情况下,保存对象过去的状态,并在需要时恢复。适用场景:1. 文字编辑器中的字符对象;

rygy_的博客 438

大话设计模式之模板模式 C#

学无止境,精益求精 十年河东,十年河西,莫欺少年穷 今天一起探讨模板模式,如下: 一、概念   上一篇文章讲了大话设计模式:原型模式,原型模式主要是通过Clone()方法《深浅复制》,创建新的对象,免去了初始化的过程。模板方法模式也特别会“偷工减料”,把不变的行为搬移到超类,去除子类中的反复代码,将代码的复用优势展现的淋漓尽致。它为我们提供了特定的结构和样式,我们仅仅需关心填充数据内容就好...

weixin_33912445的博客 152

NoSuchMethodException问题总结

1、编译异常,这个很容易发现并解决; method真的没有 替换jar包没有clean project。 2、编译正常,运行报错这是一个遇到之后让人纳闷的异常,脑袋不转弯的时候真的容易被卡住。这时只要去编译目录下: 1)查看下相应的jar包是否被引入;如果没有,咋把jar包拷入相应的目录;pom项目的话则检查下依赖的scope是不是provided等不随项目一起发布的配置。 2)检查下对应的jar包

Array7的专栏 2806

玩具:加减法验证码(1+?=4)

遇到个小需求要写一个验证码功能,就是加减法,囧,感觉挺好玩的就顺手写了。代码简单的囧……纯属自娱自乐,凑数,Orz~~ 生成图片的部分没写,逻辑都差不多。主要注意:干扰线,噪点,变形,背景色就OK。我用的现成的代码,就不发了。/** * 加减法验证码 */ public class VerifyCodeUtil { private final static Map<Integer, S

Array7的专栏 2172

Java Annotation自定义注解详解

在开发过程中总能用到注解,但是从来没有自己定义过注解。最近赋闲在家,研究整理了一番,力求知其然知其所以然。 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解。Demo没有实际意义,仅仅只是为了注解而使用注解。   1、什么是注解?        注解是在jdk 1.5开始提供的功能,目前被广泛使用。以下是引用《Java疯狂讲义》第十四章关于注解的描述:

Array7的专栏 2148

Junit4.x扩展:运行指定方法

相信很多道友搞开发的一般都会用到Junit单元测试工具,不知道大家有没有遇到一个这样的问题:     有的单元测试用例有很多标记了@Test的方法,而实际上我们只需要运行其中的某一组方法。

Array7的专栏 2019

并发包之Future:代码级控制超时时间

先谢Doug Lea。 zuiji

Array7的专栏 1843

ubuntu 15.04 手动安装nginx 1.9.0

平时工作也用nginx,不过用的时候都是已经配好的,只要简单改改参数就可以了。今天在自己的电脑上安装的时候发现没有想象的那么顺利。纸上得来终觉浅,绝知此事要躬行。正题:1、到nginx下载页面获取最新版本的包(截止发文日期,最新版本是nginx1.9.0):        地址http://nginx.org/en/download.html,也可以在命令行下直接 wget http://ngin

Array7的专栏 1619
上一篇: 设计模式学习笔记八:享元模式
下一篇: 设计模式学习笔记十:构造器模式
七郎
博客等级 码龄14年 31粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值