作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]
1.理解什么是原型模式
2.原型模式的两种实现方式
3.原型模式的设计思路
码文不易
你的关注是浩说编程持续更新的动力
掌握设计模式的三个过程:
原型模式实现很简单,对于读者来说很好理解,所以本篇内容不会很长,原型模式的本质和 ctrl c+ctrl v差不多,我愿称之为:克隆(后面都用此称呼代指原型模式)
1、一个原型类
2、由原型类本身提供一个克隆自己的方法
深克隆和浅克隆是克隆的两种实现方式。
在了解这两种方式之前,读者需要了解一个知识点:基本数据类型和引用数据类型在内存中的存储方式:
jvm在运行代码的时候会将内存分为五个区域:寄存区、本地方法区、方法区域、堆、栈(…这里又涉及到jvm机制的知识,之后会单独出一篇文章,读者如果不了解这里先有个印象即可)。
重点关注堆和栈这两部分,基本数据类型会存放在栈中,而引用类型会存放在堆里,比如我执行了下面两句话:
int A =1;
String B = new String("b");
那么jvm会这样分配内存:
所以所谓浅克隆就是:复制原型类中的基本数据类型,而对于引用数据类型则只复制存放在栈中的指向地址,而堆中的数据不做复制。也就是说复制之后在栈中有两个相同的内存标识指向同一个堆内存。
而深克隆就是:对引用数据类型做完全复制,也就是堆和栈中全部重新复制一份。
了解了以上内容之后,来看一下两种方式的代码实现
调用示例:
总结一下浅克隆的实现方式:
1、原型类必须实现Cloneable接口,否则会报空指针异常
2、在原型类中提供公共的克隆方法,用于克隆自己
3、调用Object的clone()方法实现浅克隆
不同于浅克隆调用Object的clone()方法,深克隆采用**序列化(Serializable接口)**的方式实现。
调用示例:(和浅克隆调用示例相同)
深克隆的实现方式:
1、原型类实现Serializable(序列化)接口
2、在原型类中提供公共的克隆方法
3、从序列化流中读取深克隆对象
以上就是原型模式的内容,回顾一下:原型模式,俗称克隆。两种实现方式,深克隆、浅克隆。浩说编程,帮你学到更多。
作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]
页面更新:2024-05-26
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号