原型模式
原型模式是指用原型实例指定创建对象的类型,并且通过拷贝这些原型创建新的对象。这实际上非常简单,就是对一个实体类实现一个“复制”方法,创建同类对象时直接复制。
这时我们可能有疑问了,原型模式中我们为什么要复制对象,而不是重新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进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。