文档章节

原型模式之 深度拷贝 工具类

之渊
 之渊
发布于 06/12 15:28
字数 316
阅读 6
收藏 0

看了 一些 原型模式,原来就是 深度拷贝,浅拷贝的。 工作了这么久,说实话,我还没有真实使用过 拷贝的方法的。。。 特别是浅拷贝 更加不敢乱用了,万一引用什么的搞混了就麻烦了。而且 浅拷贝还得 实现 cloable 什么的。 我们的 对象bean 一般都是 实现 序列化而已。 更加用不上了。

###深拷贝使用 深拷贝就不一样了,其实就是 类似于 new 对象, 比较安全,虽然 速度会慢很多。 可是 其实是可以 提交 开发效率的, 如果 一个 对象 很多属性,我想 复制一个差不多的 对象出来。 如果是 new 的传统方式,我得 get/set 好多代码,,,我的天啊,这代码量。。。而且容易出错 所以以后遇到 这种bean属性多的,就可以考虑使用 深拷贝了。 下面是代码

public static Object deepClone(Object object) {// 将对象写到流里

	if (object == null) {
	
		return null;
		
	}
	try {
	
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		
		ObjectOutputStream oo = new ObjectOutputStream(bo);
		
		oo.writeObject(object);// 从流里读出来
		
		ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
		
		ObjectInputStream oi = new ObjectInputStream(bi);
		
		return (oi.readObject());
		
	} catch (ClassNotFoundException e) {
	
		e.printStackTrace();
		
	} catch (IOException e) {
	
		e.printStackTrace();
		
	}
	
	throw new NullPointerException("深拷贝异常");
	
}

© 著作权归作者所有

共有 人打赏支持
之渊
粉丝 11
博文 542
码字总数 158210
作品 0
佛山
程序员
私信 提问
《JAVA-原形模式》

原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。   原型模式要求对象实现一个可以“克隆”自身的接...

吕檀溪
2016/08/16
29
0
23种设计模式(5):原型模式

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具...

LCZ777
2014/07/05
0
0
设计模式(十六)原型模式

相关文章 设计模式系列 前言 公众号有同学留言设计模式,才发现好久没有写设计模式了。关于创建型设计模式只差原型模式没写了,这一篇就来填补这个空缺。 1.原型模式定义 原型模式定义 定义:...

刘望舒
2017/06/30
0
0
设计模型之原型模型与cloneable接口(深度克隆与浅度克隆区别)

原型模型应该属于容易理解简单设计模型了,如果我们有个对象A,需要大量可以对它进行拷贝,或者需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式可...

DannyCoder
09/25
0
0
java编程学习:设计模式之原型模式!

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MyBaties分页插件PageHelper的简单使用

抛出问题: 如果想要将现有的select语句改为支持分页功能的查询语句该怎么做呢? 最简单的一种做法就是将所有的select语句都加上limit来实现分页,这种做法有什么问题呢? 有没有一种简便方法...

嘴角轻扬30
28分钟前
2
0
创业公司如何快速构建高效的监控系统?

12 月 7 日,在 2018 ArchSummit 全球架构师峰会·运维与监控专场,七牛云资深运维开发工程师贺强带来了主题为《如何快速构建高效的监控系统》的内容分享。 本文是对演讲内容的实录整理。 大...

七牛云
28分钟前
0
0
Docker与自动化测试及其测试实践

Docker 与自动化测试 对于重复枯燥的手动测试任务,可以考虑将其进行自动化改造。自动化的成本在于自动化程序的编写和维护,而收益在于节省了手动执行用例的时间。简而言之,如果收益大于成本...

微笑向暖wx
29分钟前
1
0
Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑;一个请求可能需要多个服务的调用;当请求迟缓或不可用时,无法得知...

编程SHA
31分钟前
1
0
Swift-清除缓存

func removeCache (){ // 取出cache文件夹路径.如果清除其他位子的可以将cachesDirectory换成对应的文件夹 let cachePath = NSSearchPathForDirectoriesInDomains(FileMan...

west_zll
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部