1、什么是原型模式

Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.

Prototype Design Pattern:用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。

说人话:对象复制

2、原型模式的两种实现方法

我们日常开发中,应该有使用过 BeanUtils.copyProperties()方法,其实这就是原型模式的一种用法(浅拷贝)。原型模式实现分两种:

①、浅拷贝:只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象

②、深拷贝:得到的是一份完完全全独立的对象。

Java 中 Object 类是所有类的根类,Object 类提供了一个 clone()方法,该方法可以将一个 Java 对象复制一份,但是在调用 clone方法的Java类必须要实现一个接口Cloneable,这是一个标志接口,标志该类能够复制且具有复制的能力,如果不实现 Cloneable 接口,直接调用clone方法,会抛出 CloneNotSupportedException 异常。

/*** A class implements the <code>Cloneable</code> interface to* indicate to the {@link java.lang.Object#clone()} method that it* is legal for that method to make a* field-for-field copy of instances of that class.* <p>* Invoking Object's clone method on an instance that does not implement the* <code>Cloneable</code> interface results in the exception* <code>CloneNotSupportedException</code> being thrown.* <p>* By convention, classes that implement this interface should override* <tt>Object.clone</tt> (which is protected) with a public method.* See {@link java.lang.Object#clone()} for details on overriding this* method.* <p>* Note that this interface does <i>not</i> contain the <tt>clone</tt> method.* Therefore, it is not possible to clone an object merely by virtue of the* fact that it implements this interface.  Even if the clone method is invoked* reflectively, there is no guarantee that it will succeed.** @author  unascribed* @see     java.lang.CloneNotSupportedException* @see     java.lang.Object#clone()* @since   JDK1.0*/
public interface Cloneable {}

关于深浅拷贝的详细说明,可以参考我的这篇博客:

https://www.cnblogs.com/ysocean/p/8482979.html

3、原型模式的优点

①、性能高

原型模式是在内存二进制流的拷贝, 要比直接new一个对象性能好很多, 特别是要在一个循环体内产生大量的对象时, 原型模式可以更好地体现其优点。

②、避免构造函数的约束

这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的 。 优点就是减少了约束, 缺点也是减少了约束, 需要大家在实际应用时考虑。

4、原型模式使用场景

①、在需要一个类的大量对象的时候,使用原型模式是最佳选择,因为原型模式是在内存中对这个对象进行拷贝,要比直接new这个对象性能要好很多,在这种情况下,需要的对象越多,原型模式体现出的优点越明显。

②、如果一个对象的初始化需要很多其他对象的数据准备或其他资源的繁琐计算,那么可以使用原型模式。

③、当需要一个对象的大量公共信息,少量字段进行个性化设置的时候,也可以使用原型模式拷贝出现有对象的副本进行加工处理。

Java设计模式之(四)——原型模式相关推荐

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

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

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

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

  3. 重学 Java 设计模式:实战原型模式「上机考试多套试,每人题目和答案乱序排列场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

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

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

  5. java设计模式4--建造者模式(Builder)

    本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离 ...

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

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

  7. JavaScript-设计模式(四) 原型模式

    JavaScript-设计模式(四) 原型模式 定义:原型模式(Prototype pattern)指的是使用一个原型的实例为模板,通过复制一个已经存在的实例来返回新的实例,而不是从头开始新建实例.原 ...

  8. 【Java设计模式】006-原型模式

    目录 二.原型模式 1.概述 2.应用场景 3.优缺点 优点 缺点 4.主要角色 5.深克隆与浅克隆 深克隆 浅克隆 6.通过Cloneable接口实现浅克隆 实体类 测试类 运行结果 7.改良5 实 ...

  9. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

  10. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

最新文章

  1. 我在兰亭这三年之跳出率升高门
  2. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
  3. 两种方式实现js, ajax跨域
  4. IBASE and ES change pointer
  5. 社区奖品之 【图书】基于Project 2002的项目管理
  6. python2d 平滑插值处理_python中平滑的、通用的2D线性插值
  7. MQTT 遗嘱消息(Will Message)的使用
  8. 6G尚处于早期研究阶段,长足发展需要时间和耐心
  9. 技巧 | 如何使用R语言的基础绘图系统的拼图功能
  10. 【系列8】使用Dockerfile创建带MongoDB的Centos Docker镜像
  11. c语言结构体多次调用错误,C语言在使用中遇到了一个结构体赋值失败的问题?...
  12. 字节跳动 AI Lab 21届校招启动啦!
  13. 利用python调用PSS/E进行电力系统仿真
  14. 计算机组成原理:超标量,让CPU的吞吐率超过1
  15. GB50174《电子信息系统机房设计规范》标准目录
  16. android上的sip软电话
  17. SQL Server表空间碎片化回收
  18. mysql数据库反弹端口连接提权
  19. Day 12 - 标签图片的方法与实作
  20. CE1到9关详细教程

热门文章

  1. 感知机的对偶形式及Gram矩阵的作用理解
  2. MATLAB value和handle类的区别
  3. 第十届蓝桥杯c++b组
  4. Week1 Assignment - Princeton-Algorithms-PartI
  5. 【折半查找判定树画法思路】
  6. 嵌入式stm32f411系列-- --学前准备(mdk+器件支持包+stm32cubemx+固件包)
  7. 直放站OMT调试工具
  8. 什么是ICP,什么是ICP证
  9. 云计算产品vSwitch功能的配置
  10. 如何给图片批量重命名