原型模式那些门道儿

原型模式的门道儿,没有那么浅,至少我觉得特别多。

1,jdk的浅克隆clone及深克隆实现

2,利用序列化与反序列化进行深克隆

3,clone会破坏单例

4,transient关键字-指定属性不序列化(保护敏感信息)

5,克隆的巧妙运用-当你需要使用remove方法移除掉集合中的对象,而非要修改集合中的对象的时候,可以选择使用。

6,使用json复制对象(Spring BeanUtils香香哒)

感谢这个资源时代,蛮多优秀认真的文章,这里更多的是搬运和思考。


先来看看JDK的Object的clone接口源码说明(原创)

Object clone源码

推荐阅读:浅谈Java中的深克隆和浅克隆(阿里面试)

克隆(复制)在Java中是一种常见的操作,目的是快速获取一个对象副本。克隆分为深克隆和浅克隆。

浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。

深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

总之深浅克隆都会在堆中新分配一块区域,区别在于对象属性引用的对象是否需要进行克隆(递归性的)。


 推荐阅读:java中的关键字transient,这篇文章你再也不发愁了

1,transient关键字的作用?

将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。

2,transient底层实现原理是什么?

serialization提供存储对象状态的机制(对象的状态存储到硬盘上),transient修饰的字段,他的生命周期仅仅在内存中,不会被写到磁盘中。

3、被transient关键字修饰过得变量真的不能被序列化嘛?

不是。取决于对象实现哪个序列化接口(Serializable或Exteranlizable),后者可以自定义序列化。

4、静态变量能被序列化吗?没被transient关键字修饰之后呢?

静态变量是不会被序列化的,即使没有transient关键字修饰。

5、妙用

银行卡、密码等敏感数据的

推荐阅读:你还在用BeanUtils进行对象属性拷贝?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。