文章目录

  • 介绍
  • 应用场景
  • 结构图
  • 代码实现

介绍

Prototype模式 原型模式

创建型模式之一

采取复制原型对象的方法来创建对象的实例

使用Prototype模式创建的实例,具有与原型一样的数据

特点

  • 由原型对象自身创建目标对象,也就是说,对象创建这一动作发自原型对象本身
  • 目标对象是原型对象的一个克隆。也就是说通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值
  • 根据对象克隆深度层次不同,有浅度克隆和深度克隆
    • 浅度克隆:对于引用属性,只克隆地址
    • 深度克隆:对于引用属性,其引用对象也会被克隆一份

应用场景

  • 在创建对象的时候,我们不知希望被创建的对象继承类的基本结构,还希望继承原型对象的数据
  • 希望对目标对象的修改不影响既有的原型对象(深度克隆时课完全互不影响)
  • 隐藏克隆操作的细节。

结构图

根据介绍可知,原型模式的实现就是在原型类里实现一个clone()方法,当然Java类都继承了Object,都自动有Object的clone()方法,这是一个浅拷贝的方法。

如果需要深度拷贝,可以自行重写clone方法,或者使用其他工具类

代码实现

看Object或具体拷贝方法即可

  • 最简单的实现就是属性值一一复制赋值到新对象里
  • 浅拷贝就引用只赋值引用地址(浅拷贝时一定要注意引用类型的问题,否则会给其他关联使用目标对象的代码带来你意想不到的错误)
  • 深拷贝就是引用属性也new个新的,再把引用属性内部的字段值进行拷贝
  • 深度拷贝比浅拷贝更耗时和耗空间

设计模式与应用:原型模式相关推荐

  1. Java描述设计模式(05):原型模式

    一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. 2.模式结构 原型模式要求对象实现一个 ...

  2. 设计模式学习笔记-原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...

  3. 【设计模式 06】原型模式(克隆??)

    原型模式(clone?) Prototype pattern refers to creating duplicate object while keeping performance in mind ...

  4. java 设计模式 优缺点_java设计模式2:原型模式(机制\优缺点分析\使用场景)...

    1. 原型模式实现机制 原型模式在设计模式中相对比较简单,它直接通过实现 Cloneable接口,再重写 clone()方法返回想要的对象就OK 了. 一起来看下代码 : public class P ...

  5. Java设计模式5:原型模式

    原型模式 原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意. 原型模式结构 原型模式要求对象实现一个 ...

  6. 设计模式之【原型模式】,深入理解深拷贝与浅拷贝

    文章目录 一.什么是原型模式 二.原型模式实现方式 1.传统方式 2.原型模式 熟悉浅拷贝和深拷贝 浅拷贝实现对象克隆 深拷贝实现对象克隆 一.什么是原型模式 原型模式: 用一个已经创建的实例作为原型 ...

  7. 【设计模式自习室】原型模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  8. java设计模式之五(原型模式)

    什么是原型模式? 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 当我们程序中有几个相似但又不 ...

  9. 设计模式 之美 -- 原型模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现方式 C++实现 C语言实现 4. 缺点 5. 和其他三种创建模式的对比(单例,工厂,建造者) 1. 解决问题 如果对象的创建成本较大,而同一个类的 ...

  10. 设计模式入门之原型模式Prototype

    //原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 //简单来说,当进行面向接口编程时,假设须要复制这一接口对象时.因为不知道他的详细类型并且不能实例化一个接口 //这时就须要 ...

最新文章

  1. mysql 同一张表 某个字段更新到另一条数据上_面试基础:数据库MySQL基础入门(下)...
  2. 利用.net4.0的dynamic特性制造的超级简单的微信SDK
  3. 【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法
  4. 11、MySQL字符集和校对规则详解
  5. c语言对中文字符串编码_Python || 学习笔记(1):数据类型字符串变量和编码
  6. (16)FPGA面试技能提升篇(Python)
  7. ODOO v10.0 自动生成财务凭证的科目设置
  8. 在gcp终端中使用ssh连接到本地机器
  9. 深入浅出之正则表达式(一)(转)
  10. IBM8800存储,光钎交换机384B,主机Linux,二代支付前置
  11. 图像检测与分割标注文件XML/JSON/TXT一键批量转换编辑软件
  12. rrweb从数据库读取数据回放问题 (Error: Replayer need at least 2 events.)
  13. 浅谈JdbcDaoSupport
  14. Eclipse背景颜色设置
  15. 计算机辅助教学原理感悟,计算机辅助教学课程学习心得.docx
  16. Golang学习笔记汇总
  17. Google I/O 2021 发布 Flutter 2.2
  18. 技术从业者的未来(2)
  19. 2015——致我那终将逝去的青春
  20. csdn外包电子商务认证设想讨论稿——CSDN外包实践(36)

热门文章

  1. 搞懂spark-submit参数及应用程序提交(详细)
  2. java io流简单笔记
  3. 高考数学试题等比数列及其前n项和|附习题
  4. 一个研究生学历到底值多少钱?认真算一下我酸了......
  5. 用Go语言实现登录验证 (Golang经典编程案例)
  6. 2022-04-16老张修路360笔试-prim构建最小生成树
  7. 如何禁用两个虚拟化提升Windows 11上游戏性能
  8. js 文件操作 fso new ActiveXObject( Scripting.FileSystemObject )
  9. 苏神大佬的博客-科学空间
  10. 蓝牙技术|蓝牙的四种安全模式