Skip to content

原型模式

字数: 0 字 时长: 0 分钟

简介

原型模式(Prototype Pattern)核心是通过复制现有对象来创建新对象,避免重新创建对象的昂贵开销

UML 类图

prototype.webp

  • 原型接口(Prototype):声明一个克隆自身的接口,所有具体原型类都需要实现这个接口
  • 具体原型类(ConcretePrototype):实现克隆方法,定义如何复制自身的对象

深拷贝与浅拷贝

原型模式就是通过拷贝来创建对象,JDK 原生支持,即实现 Cloneable 接口,重写 clone() 方法。

  • 浅拷贝:只复制基本类型字段和引用地址(也就是只复制一层),默认的 clone() 实现
  • 深拷贝:复制基本类型字段,创建新对象递归复制引用对象
java
public class Teacher implements Cloneable {
    private String name;
    private List<Student> students;
    @Override
    public Teacher clone() {
        // 浅拷贝
        return (Teacher) super.clone();
    }
    
    // 深拷贝示例
    public Teacher deepClone() { 
        Teacher teacher = this.clone();
        // 创建新对象
        List list = new ArrayList<>();
        // 递归复制引用对象
        students.forEach(student -> list.add(student.clone()));
        teacher.setStudents(list);
        return teacher;
    }
}