简介
原型模式(Prototype Pattern) 是一种创建型 设计模式,它通过复制现有对象 来生成新对象,而不是通过 new 关键字创建。核心思想是减少对象创建的开销,尤其是当对象初始化过程复杂或代价较高时。
原型模式的核心实现
1.实现 Cloneable 接口
Java 的 Object 类提供了 clone() 方法,但需要类实现 Cloneable 接口(标记接口)才能调用。
2.重写 clone() 方法
通常重写 clone() 方法以实现对象的深拷贝或浅拷贝。
默认浅拷贝
java
class Prototype implements Cloneable {
private String name;
private List<String> data;
public Prototype(String name, List<String> data) {
this.name = name;
this.data = data;
}
// 深拷贝实现
@Override
protected Prototype clone() {
try {
Prototype cloned = (Prototype) super.clone(); //这里只实现基础数据类型的拷贝,对于对象是没有进行深拷贝的
cloned.data = new ArrayList<>(this.data); // 深拷贝引用对象 手动深拷贝
return cloned;
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
}
使用场景
对象创建成本高
当对象初始化需要大量资源(如数据库连接、复杂计算)时,直接复制现有对象更高效。
例如:数据库配置对象、复杂的游戏角色对象。
避免重复初始化
当新对象与原对象差异较小时,直接克隆比重新构造更便捷。
例如:修改已有对象的少数属性生成新对象。
动态运行时对象生成
在运行时动态生成对象,无需依赖具体类。
例如:通过克隆预定义原型(如工具条按钮)生成新组件。
保护性拷贝
防止外部代码修改对象内部状态,返回对象的拷贝而非原始对象。
例如:不可变对象的防御性复制。
原型模式的优缺点
优点
减少对象创建开销,提升性能。
简化复杂对象的创建过程。
动态扩展对象行为(通过组合原型)。
缺点
深拷贝需手动处理引用对象(如集合、嵌套对象)。
每个类需实现 clone() 方法,增加代码复杂度。
总结
实际原型模式就是在我们需要创建大量对象的时候,为了节省重复创建对象时候的开销,所以用到了原型模式,他能帮我们快速,高效的创建重复对象