Java中的原型模式是一种创建型设计模式,它通过复制已有对象来创建新的对象,而不是每次都创建一个新的实例。这个模式适用于那些创建新对象的成本较大或者需要保持对象属性一致性的场景。在Java中,通常通过实现Cloneable
接口并重写Object
类中的clone()
方法来实现原型模式。
以下是一个简单的Java原型模式的示例:
import java.util.Date;
// 原型接口(Prototype Interface)
interface Prototype<T> {
T clone();
}
// 具体原型类(Concrete Prototype)
class Employee implements Prototype<Employee> ,Cloneable{
private String name;
private Date hireDate;
public Employee(String name, Date hireDate) {
this.name = name;
this.hireDate = (Date) hireDate.clone(); // 防止日期对象浅克隆
}
// 重写clone()方法实现深克隆
@Override
public Employee clone() {
try {
return (Employee) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError(); // 因为Employee实现了Cloneable接口,所以此处不会抛出异常
}
}
// getter和setter方法省略...
}
public class PrototypePatternDemo {
public static void main(String[] args) {
// 创建原始员工对象
Employee original = new Employee("John Doe", new Date());
// 通过原型模式克隆员工对象
Employee cloned = original.clone();
// 修改克隆后的员工信息
cloned.setName("Jane Doe");
// 输出原始员工与克隆员工的信息
System.out.println("Original Employee: " + original.getName() + ", Hire Date: " + original.getHireDate());
System.out.println("Cloned Employee: " + cloned.getName() + ", Hire Date: " + cloned.getHireDate());
}
}
在这个例子中,Employee
类实现了Prototype
接口,这意味着它可以被克隆。当调用clone()
方法时,将创建一个原始对象的副本,这样修改克隆对象的属性不会影响到原始对象。注意在实现深克隆时,需要确保对象的所有属性也都进行适当的深度复制,例如在本例中,日期对象进行了克隆以防止浅克隆带来的数据共享问题。