原型模式

原型模式是指用原型实例指定创建对象的类型,并且通过拷贝这些原型创建新的对象。这实际上非常简单,就是对一个实体类实现一个“复制”方法,创建同类对象时直接复制。

这时我们可能有疑问了,原型模式中我们为什么要复制对象,而不是重新new一个?实际上某些情况下是有这样的适用场景的,比如创建对象是一个耗时操作,或者我们需要复制一个对象当前的运行时状态。

Java的clone()

Java提供了对象的浅拷贝方法clone(),实体类需要实现Cloneable接口,并实现clone()方法。

这里要注意浅拷贝和深拷贝的问题:

  • 浅拷贝:只复制基本类型和复合类型的引用
  • 深拷贝:Java没有深拷贝函数,实际上也无法实现一个通用的深拷贝函数,因为对象间可能存在复杂的引用关系,引用深度、循环引用等都会造成问题,深拷贝功能应该由程序员根据业务需求自己编写。一种比较偷懒的做法是使用序列化机制,将对象先序列化再反序列化,得到的就是深拷贝的对象了

下面例子我们使用Java实现一个原型模式。

Student.java

public class Student implements Cloneable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Main.java

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Student s = new Student();
        s.setName("Tom");

        Student s2 = (Student) s.clone();

        System.out.println(s2.getName());
    }
}
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap