Java设计模式之原型模式.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
下面了解两个概念 浅克隆 :克隆出来的对象实例一模一样,对象的属性如果是引用数据类型,那么他么指向同一个地址值。无论是修改原来的对象,还是修改克隆出来的对象,只要是引用数据类型修改了,那么两个对象同时被修改,因为他们共享同一地址值。 深克隆 :克隆出来的对象实例也是一模一样的,但是他们的引用属性也被克隆了,两个对象虽然一模一样,但是没有任何关联。修改其中一个对象,不影响另一个对象。 Java设计模式中的原型模式是一种创建型设计模式,它允许我们创建对象的副本,而无需知道对象是如何被创建的。在处理复杂对象时,通过原型模式能够显著提高对象复制的效率,尤其是在实例化新对象需要执行大量初始化操作或者涉及到数据库交互的情况下。 在Java中,对象的克隆分为两种类型:浅克隆和深克隆。 浅克隆(Shallow Clone): 浅克隆是指创建一个新对象,这个新对象是原对象的一个副本,它们拥有相同的属性值。但当对象的属性是引用数据类型时,新旧对象会共享同一个内存地址。因此,如果修改了其中一个对象的引用属性,另一个对象的相应属性也会受到影响。浅克隆可以通过实现`java.lang.Cloneable`接口并重写`clone()`方法来实现。 深克隆(Deep Clone): 深克隆则不仅创建对象的副本,还对引用类型的属性进行逐个克隆,确保每个克隆对象拥有独立的引用。这意味着即使修改其中一个对象的引用属性,也不会影响另一个对象。在Java中,实现深克隆通常有两种方式:一是手动实现每个引用对象的克隆方法,二是利用序列化和反序列化来达到深克隆的效果。后者相对更简单,但可能需要额外的序列化支持,并且可能会有性能影响。 以下是一个简单的深克隆实现示例: ```java import java.io.*; // 原型接口 public interface Prototype { Prototype clone() throws CloneNotSupportedException; } // 具体原型类,实现深克隆 public class ElectronicInvoice implements Prototype, Serializable { private String header; private String serialNumber; // ...其他属性 @Override public ElectronicInvoice clone() throws CloneNotSupportedException { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (ElectronicInvoice) ois.readObject(); } catch (IOException | ClassNotFoundException e) { throw new CloneNotSupportedException("Failed to clone ElectronicInvoice"); } } } // 工具类,用于获取深克隆对象 public class PrototypeUtil { public static <T extends Prototype> T deepClone(T prototype) throws CloneNotSupportedException { return prototype.clone(); } } ``` 在这个例子中,`ElectronicInvoice`类实现了`Prototype`接口并提供了深克隆方法。`PrototypeUtil`工具类则提供了静态方法`deepClone()`,方便地调用对象的深克隆方法。 使用原型模式的关键在于理解何时应该使用浅克隆和深克隆,以及如何有效地实现它们。在实际应用中,选择哪种克隆方式取决于对象的复杂性和对副本独立性的需求。对于简单对象,浅克隆可能已经足够,而对于包含复杂引用结构的对象,深克隆通常是必要的。




剩余18页未读,继续阅读



















- 粉丝: 304
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 机械制造企业项目管理应用分析.docx
- XXXX道路整治工程施工总进度具体计划横道图、网络图、总平面图.doc
- 电子商务网站建设中数据库安全隐患与策略分析.docx
- 服务器存储网络设备巡检报告.docx
- 单片机交通灯设计方案和实现.doc
- 单片机原理及应用技术试卷.doc
- 关于高校网络和信息安全管理与技术分析.docx
- 2012落索坡小学教育信息化建设方案.doc
- 输电线路工程项目管理实施对策分析.docx
- 淘宝网站的设计与应用.doc
- 网络教学下的数学课堂教学.docx
- 探索互联网+模式下提升档案社会服务的有效提升.docx
- spring-boot-seckill-C++资源
- 大数据时代下的物联网进程-专访中国工程院院士、中国互联网协会理事长邬贺铨.docx
- 西北工业大学入学测试机考模拟题及答案专升本计算机基础.doc
- 大数据时代基于云会计的库存管理模式构建.docx



评论0