一张图搞定Java原型模式

作者:秦始皇 来源:baijiahao.baidu.com

原型模式(prototype)

通过new产生一个对象需要非常繁琐的数据准备货访问权限,则可以使用原型模式。

原型模式的本质是Java中的克隆技术,以某个对象为原型,复制出新的对象。

通过原型模式创建的克隆对象属性值完全和原型对象相同,并且克隆出的信对象不会改变影响原型对象。

原型模式的实现

  • Cloneable接口和clone方法。
  • 序列化和反序列化实现clone。

应用场景

java语言中,继承用到了该模式。

原型模式一般和工厂方法模式一起出现,通过clone的方法创建一个工厂,然后由工厂方法提供给调用者。

Spring 中的bean的创建实际就是两种:单例模式和原型模式。

深克隆和浅克隆

Object 的clone()方法实现的是浅克隆,要实现深克隆需要重写clone()方法,在该方法中对属性中的引用对象也进行克隆。

浅克隆和深克隆

测试:

执行结果:

com.hh.prototype.Sheep@2a139a55

com.hh.prototype.Sheep@15db9742

Sun Mar 21 08:20:34 CST 26579

结果说明:

通过直接调用Object的clone()方法,创建了2个不同的对象,但是修改其中一个对象的属性的时候,另一个对象的属性也发生了改变。

Thu Jan 01 08:20:34 CST 1970 //s2的date没有发生改变

原型模式构建对象和 new 对象效率比较

采用原型模式创建对象200次耗时:0

采用new创建对象200次耗时:2057

所以,通过原型模式创建对象,可以大大提高创建的效率,直接克隆,避免了重新执行构造过程。原型模式和工厂模式搭配起来,是常用的使用方式。

另外,最近新建了一个微信交流学习群,想要进入的小伙伴可以在后台加一下。

原文发布于微信公众号 - java技术学习之道(javajsxxzd)

原文发表时间:2018-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老司机的技术博客

golang学习笔记2:基本结构与数据类型

除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数。

584
来自专栏谦谦君子修罗刀

静态内存区域解析

通常在代码中产生的bug,往往是源于概念不清晰。知己知彼百战不殆,对内存这块了如指掌,能极大优化代码的性能。 一、内存四区建立流程讲解 ? 如上图所示,首先操作...

2586
来自专栏Python爱好者

Python高效编程(三)

1025
来自专栏221-B

Python基础知识总结

首先,学一门语言都会问:点解要学这门语言? 而学Python的原因很简单,原因就是…..好鬼简单.(这句话不是我说的) 很喜欢Python极简的代码风格,以及众...

1072
来自专栏琦小虾的Binary

map 学习(上)——C++中 map 的使用

map 学习(上)——C++中 map 的使用 欠下数据结构的债,迟早是要还的…… 最近写毕业论文过程中,需要用到哈希表的数据结构,此外空闲时间在刷 Leetc...

2486
来自专栏技术之路

详解JavaScript闭包

  要想完全明白JavaScript的闭包,要先明白js中的一些基础原理,然后我再给出一些例子来讲解闭包。   在执行JavaScript时会创建一个执行环境(...

23910
来自专栏Android 研究

Java虚拟机基础——3类加载机制

在这个框架图很容易大体上了解Java程序工作原理。首先当程序员写好.java文件后,需要先运行(假设该文件为demo.java)

884
来自专栏Golang语言社区

Go 语言结构

o Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代码...

3417
来自专栏Golang语言社区

【基础篇】Go 语言结构

Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代...

32612
来自专栏北京马哥教育

wtfPython—Python中一些奇妙的代码

wtfPython是github上的一个项目,作者收集了一些奇妙的Python代码片段,这些代码的输出结果会和我们想象中的不太一样; 通过探寻产生这种结果的内部...

590

扫码关注云+社区