设计模式 ——原型模式

一. 概念

 以已经创建的对象作为原型,通过复制该原型对象创建一个和原型对象相同的新对象

二. 组成部分

在这里插入图片描述

三. 浅拷贝和深拷贝

浅拷贝:对于引用数据类型,地址相同。对于值数据类型,内容相同。
深拷贝:对于引用数据类型,地址不同,但内容相同。对于值数据类型,内容相同。
java Object中的clone实现浅拷贝。
Clonable就是抽象原型类。一个类实现Cloneable接口是为了向Object.clone()方法表明,该方法对该类的实例进行字段对字段的复制是合法的。在未实现Cloneable接口的实例上调用Object的clone方法将导致抛出CloneNotSupportedException异常
通过序列化的方式可以实现深拷贝。也可以通过挨个实现成员对象的值拷贝实现深拷贝。

深拷贝有以下实现方式:

  • 用Cloneable接口和Object的clone()方法:你可以使用clone()方法创建一个对象的拷贝,但是这种方式有一些缺点。首先,clone()方法并不总是可用的(只有实现了Cloneable接口的对象才可以使用),并且这种方式需要你显式地处理CloneNotSupportedException。更重要的是,它只提供浅拷贝,如果需要深拷贝,你需要自己实现。
  • 使用序列化:Java中的另一种创建对象深拷贝的方式是通过对象序列化。你可以将对象序列化到一个字节流中,然后再从这个字节流中反序列化出一个全新的对象。这种方式可以自动处理所有的复杂字段和对象引用,但是需要所有涉及的类都实现Serializable接口,而且性能相对较低。
  • 使用拷贝构造函数或者拷贝工厂:这种方式下,你会为每一个类提供一个拷贝构造函数或者一个拷贝工厂,它会创建一个新的对象,并复制原对象的所有字段。这种方式更加灵活,但是需要手动实现,并且如果类的结构改变了,可能需要更新拷贝函数。

哪种方式更好取决于具体的情况。如果你的类结构较简单,那么可能使用拷贝构造函数或者拷贝工厂就足够了。如果你的类结构比较复杂,那么使用序列化可能会更方便。
使用clone()方法并不推荐,因为它有一些已知的问题,如它只提供浅拷贝,容易导致错误,以及需要处理CloneNotSupportedException等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值