原文地址:https://jaune162.blog/design-pattern/prototype-pattern/
引言
在Java中如果我们想要拷贝一个对象应该怎么做?第一种方法是使用 getter
和setter
方法一个字段一个字段设置。或者使用 BeanUtils.copyProperties()
方法。这种方式不仅能实现相同类型之间对象的拷贝,还可以实现不同类型之间的拷贝。
如果仅考虑相同对象之间的拷贝,有没有什么更优雅的方式呢?那就是原型模式。
定义及实现
定义
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
结构
原型模式就是类中提供一个拷贝方法,用于拷贝一个和自身属性一模一样的对象。
代码实现
第一种方式
public interface Prototype<T> {
T copy();
}
@NoArgsConstructor
@Data
public class ConcretePrototype1 implements Prototype<ConcretePrototype1> {
private String name;
private Integer age;
public ConcretePrototype1(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public ConcretePrototype1 copy() {
return new ConcretePrototype1(this.name, this.age);
}
}
public class Main {
public static void main(String[] args) {
ConcretePrototype1 p1 = new ConcretePrototype1();
p1.setAge(18);
p1.setName("prototype1");
System.out.println(p1);
ConcretePrototype1 p2 = p1.copy();
System.out