原型模式(Prototype Pattern)是创建型设计模式的一种,它通过克隆(复制)已有的对象来创建新对象,而不是通过实例化。该模式的核心思想是:通过复制原型对象来生成新对象,避免了重新创建对象的开销。
在Java中,原型模式通常通过实现 Cloneable 接口 和重写 clone() 方法 来实现。以下是原型模式的关键点:
原型模式的优点
- 性能提升:复制对象比重新初始化对象要快,尤其是创建成本高的对象。
- 隐藏复杂逻辑:无需关心创建过程中的复杂逻辑,直接通过克隆获得实例。
- 动态性:在运行时可以动态创建对象,适合需要大量类似对象的场景。
适用场景
- 对象初始化昂贵,但可以通过现有实例复制。
- 需要生成对象的种类繁多,而这些对象差异较小。
- 避免构造函数污染,减少复杂的参数配置。
组成
- Prototype接口:定义一个clone方法。
- 具体原型类(ConcretePrototype):实现克隆操作,并返回对象副本。
- 客户端(Client):调用原型的clone方法,创建新对象。
代码
// Prototype接口
public abstract class Prototype implements Cloneable {
@Override
public Prototype clone() {
try {
// 调用Object的clone方法,浅拷贝
return (Prototype) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
// 具体原型类
public class ConcretePrototype extends Prototype {
private String field;
public ConcretePrototype(String field) {
this.field = field;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
@Override
public String toString() {
return "ConcretePrototype{" +
"field='" + field + '\'' +
'}';
}
}
// 客户端
public class PrototypeClient {
public static void main(String[] args) {
// 创建一个原型对象
ConcretePrototype prototype = new ConcretePrototype("原型值");
// 克隆对象
ConcretePrototype clonedPrototype = (ConcretePrototype) prototype.clone();
// 修改克隆对象
clonedPrototype.setField("克隆值");
// 输出
System.out.println("原型对象:" + prototype);
System.out.println("克隆对象:" + clonedPrototype);
}
}