原型模式(Prototype Pattern)是创建型设计模式的一种,它通过克隆(复制)已有的对象来创建新对象,而不是通过实例化。该模式的核心思想是:通过复制原型对象来生成新对象,避免了重新创建对象的开销。
在Java中,原型模式通常通过实现 Cloneable 接口 和重写 clone() 方法 来实现。以下是原型模式的关键点:
原型模式的优点
- 性能提升:复制对象比重新初始化对象要快,尤其是创建成本高的对象。
- 隐藏复杂逻辑:无需关心创建过程中的复杂逻辑,直接通过克隆获得实例。
- 动态性:在运行时可以动态创建对象,适合需要大量类似对象的场景。
适用场景
- 对象初始化昂贵,但可以通过现有实例复制。
- 需要生成对象的种类繁多,而这些对象差异较小。
- 避免构造函数污染,减少复杂的参数配置。
组成
- Prototype接口:定义一个clone方法。
- 具体原型类(ConcretePrototype):实现克隆操作,并返回对象副本。
- 客户端(Client):调用原型的clone方法,创建新对象。
代码
// Prototype接口
public abstract class Prototype implements Cloneable {@Overridepublic 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;}@Overridepublic 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);}
}