设计模式与应用:原型模式
文章目录
- 介绍
- 应用场景
- 结构图
- 代码实现
介绍
Prototype模式 原型模式
创建型模式之一
采取复制原型对象的方法来创建对象的实例
使用Prototype模式创建的实例,具有与原型一样的数据
特点
- 由原型对象自身创建目标对象,也就是说,对象创建这一动作发自原型对象本身
- 目标对象是原型对象的一个克隆。也就是说通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值
- 根据对象克隆深度层次不同,有浅度克隆和深度克隆
- 浅度克隆:对于引用属性,只克隆地址
- 深度克隆:对于引用属性,其引用对象也会被克隆一份
应用场景
- 在创建对象的时候,我们不知希望被创建的对象继承类的基本结构,还希望继承原型对象的数据
- 希望对目标对象的修改不影响既有的原型对象(深度克隆时课完全互不影响)
- 隐藏克隆操作的细节。
结构图
根据介绍可知,原型模式的实现就是在原型类里实现一个clone()方法,当然Java类都继承了Object,都自动有Object的clone()方法,这是一个浅拷贝的方法。
如果需要深度拷贝,可以自行重写clone方法,或者使用其他工具类
代码实现
看Object或具体拷贝方法即可
- 最简单的实现就是属性值一一复制赋值到新对象里
- 浅拷贝就引用只赋值引用地址(浅拷贝时一定要注意引用类型的问题,否则会给其他关联使用目标对象的代码带来你意想不到的错误)
- 深拷贝就是引用属性也new个新的,再把引用属性内部的字段值进行拷贝
- 深度拷贝比浅拷贝更耗时和耗空间
设计模式与应用:原型模式相关推荐
- Java描述设计模式(05):原型模式
一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. 2.模式结构 原型模式要求对象实现一个 ...
- 设计模式学习笔记-原型模式
一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...
- 【设计模式 06】原型模式(克隆??)
原型模式(clone?) Prototype pattern refers to creating duplicate object while keeping performance in mind ...
- java 设计模式 优缺点_java设计模式2:原型模式(机制\优缺点分析\使用场景)...
1. 原型模式实现机制 原型模式在设计模式中相对比较简单,它直接通过实现 Cloneable接口,再重写 clone()方法返回想要的对象就OK 了. 一起来看下代码 : public class P ...
- Java设计模式5:原型模式
原型模式 原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意. 原型模式结构 原型模式要求对象实现一个 ...
- 设计模式之【原型模式】,深入理解深拷贝与浅拷贝
文章目录 一.什么是原型模式 二.原型模式实现方式 1.传统方式 2.原型模式 熟悉浅拷贝和深拷贝 浅拷贝实现对象克隆 深拷贝实现对象克隆 一.什么是原型模式 原型模式: 用一个已经创建的实例作为原型 ...
- 【设计模式自习室】原型模式
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...
- java设计模式之五(原型模式)
什么是原型模式? 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 当我们程序中有几个相似但又不 ...
- 设计模式 之美 -- 原型模式
文章目录 1. 解决问题 2. 应用场景 3. 实现方式 C++实现 C语言实现 4. 缺点 5. 和其他三种创建模式的对比(单例,工厂,建造者) 1. 解决问题 如果对象的创建成本较大,而同一个类的 ...
- 设计模式入门之原型模式Prototype
//原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 //简单来说,当进行面向接口编程时,假设须要复制这一接口对象时.因为不知道他的详细类型并且不能实例化一个接口 //这时就须要 ...
最新文章
- mysql 同一张表 某个字段更新到另一条数据上_面试基础:数据库MySQL基础入门(下)...
- 利用.net4.0的dynamic特性制造的超级简单的微信SDK
- 【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法
- 11、MySQL字符集和校对规则详解
- c语言对中文字符串编码_Python || 学习笔记(1):数据类型字符串变量和编码
- (16)FPGA面试技能提升篇(Python)
- ODOO v10.0 自动生成财务凭证的科目设置
- 在gcp终端中使用ssh连接到本地机器
- 深入浅出之正则表达式(一)(转)
- IBM8800存储,光钎交换机384B,主机Linux,二代支付前置
- 图像检测与分割标注文件XML/JSON/TXT一键批量转换编辑软件
- rrweb从数据库读取数据回放问题 (Error: Replayer need at least 2 events.)
- 浅谈JdbcDaoSupport
- Eclipse背景颜色设置
- 计算机辅助教学原理感悟,计算机辅助教学课程学习心得.docx
- Golang学习笔记汇总
- Google I/O 2021 发布 Flutter 2.2
- 技术从业者的未来(2)
- 2015——致我那终将逝去的青春
- csdn外包电子商务认证设想讨论稿——CSDN外包实践(36)
热门文章
- 搞懂spark-submit参数及应用程序提交(详细)
- java io流简单笔记
- 高考数学试题等比数列及其前n项和|附习题
- 一个研究生学历到底值多少钱?认真算一下我酸了......
- 用Go语言实现登录验证 (Golang经典编程案例)
- 2022-04-16老张修路360笔试-prim构建最小生成树
- 如何禁用两个虚拟化提升Windows 11上游戏性能
- js 文件操作 fso new ActiveXObject( Scripting.FileSystemObject )
- 苏神大佬的博客-科学空间
- 蓝牙技术|蓝牙的四种安全模式