Java实现GOF23原型模式:高效克隆与对象复制
79 浏览量
更新于2024-09-01
收藏 82KB PDF 举报
"本文主要介绍了GOF23设计模式中的原型模式,包括其核心作用、优点、实现方式以及一个简单的浅克隆示例。"
在软件设计中,原型模式(Prototype Pattern)是一种创建型设计模式,它允许我们通过复制已有对象来创建新对象,而不是通过new操作符来创建。这种模式常用于当我们需要频繁地创建具有相同或相似属性的新对象时,以提高程序的运行效率。
一、核心作用
原型模式的主要作用是为新对象的创建提供一个已有的对象作为原型,通过复制原型对象来创建新对象。这样可以避免复杂的初始化过程或者对创建对象的权限限制,简化创建流程。
二、优点
1. 效率高:相比直接使用new操作符创建新对象,原型模式可以避免重复执行构造过程中的步骤,从而提高创建对象的效率。
2. 安全性:克隆出的对象与原型对象之间是独立的,修改克隆对象的属性不会影响到原型对象,确保了数据的安全性和独立性。
三、实现方式
在Java中,实现原型模式主要有以下两个步骤:
1. 实现Cloneable接口:这个接口没有定义任何方法,但它的存在表明该类支持克隆操作。
2. 重写Object类中的clone()方法:这是实现克隆的关键,它会返回对象的一个副本。需要注意的是,如果对象中包含不可克隆的成员,需要特别处理,否则可能会抛出CloneNotSupportedException异常。
四、示例 - 浅克隆
以下是一个简单的Java实体类Sheep的示例,它实现了Cloneable接口,表示它可以被克隆:
```java
public class Sheep implements Cloneable, Serializable {
private String sname;
private Date birthday;
public Sheep(String sname, Date birthday) {
this.sname = sname;
this.birthday = birthday;
}
// 实现Cloneable接口并重写clone()方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
// getter和setter方法省略...
}
```
在测试类Client中,我们可以创建一个原型对象,然后通过调用clone()方法进行浅克隆:
```java
public class Client {
public static void main(String[] args) {
Sheep originalSheep = new Sheep("羊A", new Date());
Sheep clonedSheep = (Sheep) originalSheep.clone();
// 修改克隆后的对象
clonedSheep.setSname("羊B");
// 输出原始对象和克隆对象的信息,可以看到它们的生日相同,名字不同
System.out.println("Original Sheep: " + originalSheep.getSname() + ", Birthday: " + originalSheep.getBirthday());
System.out.println("Cloned Sheep: " + clonedSheep.getSname() + ", Birthday: " + clonedSheep.getBirthday());
}
}
```
在这个例子中,我们创建了一个Sheep对象originalSheep,然后通过调用它的clone()方法创建了clonedSheep。由于是浅克隆,所以生日字段被共享,而名字字段因设置了新的值而不同。
总结,原型模式是一种实用的设计模式,特别是在需要大量创建相似对象的情况下,可以大大提高代码的效率和可维护性。在实际应用中,还需要根据具体需求选择浅克隆或深克隆,以确保对象的正确复制和独立性。
166 浏览量
548 浏览量
262 浏览量
160 浏览量
113 浏览量
128 浏览量
107 浏览量
2010-04-18 上传
2010-09-06 上传
weixin_38672739
- 粉丝: 8
- 资源: 920
最新资源
- 创新商业公司网页模板
- leetcode-[removed]前攻城狮从零入门算法的宝藏题库,根据算法大师的经验总结了100+道LeetCode力扣的经典题型JavaScript题解和思路。一起加油
- 情侣微信小程序,支持任务完成、奖励兑换、记事本和 Todo-List 等功能.zip
- terminal-context-menu
- QT5.13.1的MySQL所需文件.rar
- 中秋节动态宽银幕中国风ppt片头动画模板.rar
- 绿色电子科技商务网页模板
- nodeul-market-retro
- firmware-master.zip
- 投资组合:个人投资组合
- 中国电信分公司微博运营策划方案ppt模板.rar
- 绿色城市生活公司网页模板
- simpy_practice:引用官方文档中的示例:https:simpy.readthedocs.ioenlatestindex.html
- 商务团队背景图片PPT模板
- PSEC:对等安全临时通信协议
- java源码查看-pimcore-groupdocs-viewer-java-source:适用于PimCore的GroupDocsViewe