设计模式之~原型模式

news/2024/11/30 12:53:10/

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

优点:

一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这即隐藏了对象创建的细节,又对性能大大的提高。

如果字段是值类型的,则对该字段执行逐位赋值,如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。

浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。 (把要复制的对象所引用的对象都复制一遍)

缺点:

实现深复制时可能需要比较复杂的代码。

适用场景:

原型模式通常在以下情况使用:通过其构造方法创建一个对象需要耗时很久或者消耗很多资源时,可以考虑使用原型模式。

(使用clone方法创建对象不需要调用其构造方法,它的本质是在内存中复制对象)

一般在初始化的信息不发生变化的情况下,克隆是最好的办法。

结构图:

原型模式的注意事项(java):

1、使用原型模式复制对象不会调用类的构造方法。

        因为对象的复制是通过调用Object类的clone方法来完成的,它直接在内存中复制数据,因此不会调用到类的构造方法。不但构造方法中的代码不会执行,甚至连访问权限都对原型模式无效。还记得单例模式吗?单例模式中,只要将构造方法的访问权限设置为private型,就可以实现单例。但是clone方法直接无视构造方法的权限,所以,单例模式与原型模式是冲突的,在使用时要特别注意。

2、深拷贝与浅拷贝。

        Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。

 


http://www.ppmy.cn/news/109076.html

相关文章

管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)

根据所学的知识, 写一个管理系统, 顺便总结一些知识点 准备: 前端用vue-cli的框架, 后端用jdbc连接数据库, 项目部署tomcat服务器来完成交互 ●前端的vue-cli框架搭建可以看 点击跳转 的第二小结 ●后端的tomcat在idea里的相关的配置与集成,可以看 点击跳跃 文章目录 一、 前段…

NLP:文本预处理总览

1 用n-gram语言模型过滤低质量内容 使用n-gram语言模型对文本进行评估,从而过滤掉低质量的内容。具体来说,可以通过以下步骤进行: 1 将文本分成n-gram序列,其中n是一个整数。 2 使用已经训练好的n-gram语言模型对每个n-gram序列…

网工内推 | 快手、瑞芯微招运维,思科、红帽认证优先

01 快手 招聘岗位:IT系统运维 职责描述: 1、负责IT基础架构运维体系的建设和优化改进; 2、负责IT核心基础服务(如DNS、负载均衡、容器)的架构设计、平台建设和运维; 3、负责IT内部日志系统、监控系统、报警…

智警杯1.4---excel可视化

视频要点: 首先就是有数据透视表 点击数据透视表,分析,字段项目, 切片器筛选 切片器(我希望用什么对数据进行一个筛选) 跟下拉列表有点像,只不过切片器仅仅之对于数据透视表 依旧需要用su…

SpringBoot+原生awt,实现花花绿绿的图形验证码

图形验证码是用于验证用户身份的一种方式,通常在网站注册、登录或进行某些敏感操作时会使用。它通过展示一个包含随机字符或数字的图形,要求用户输入相应的字符或数字来证明其为真人而非机器人。图形验证码能有效地防止机器人攻击和恶意注册行为&#xf…

重磅!软著申请不需要邮寄纸质材料啦,附软著申请流程。

重磅!软著申请不需要邮寄纸质材料啦,附软著申请流程。 最新消息申请流程一,准备申请材料二,申请人填写申请表三,提交申请材料四,补正五,审查六,发布公告七,接受异议八&am…

Docker应用部署之Nginx

部署nginx 要求:在docker容器中部署nginx,并通过外部机器访问nginx 步骤: 1.搜索nginx镜像 docker search nginx 2.拉取nginx镜像 docker pull nginx 3.创建容器 #在root目录下创建nginx目录用于存放nginx项目 mkdir ~/nginx cd ~/ng…

设计模式之~桥接模式

桥接模式: 将抽象部分与它的实现部分分离,使他们都可以独立地变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 什么叫抽象与它的实现分离,这并不是说,…