定义:实现cloneable接口,不通过new一个对象出来,而是通过复制一个对象的模式叫做原型模式。
看下例子:
import java.util.Random;
public class Main {
public static void main(String[] args) {
Mail mail = new Mail();
mail.setMailTitle("XXX");
for (int i = 0; i < 10; i++) {
Mail cloneMail = mail.clone();
Random random= new Random();
cloneMail.sendMail(random.nextInt(15)+"");
}
}
}
class Mail implements Cloneable {
private String title;
public void setMailTitle(String title) {
this.title = title;
}
public void sendMail(String content) {
System.out.println(title + ":" + content);
}
@Override
protected Mail clone() {
Mail mail = null;
try {
mail = (Mail) super.clone();
} catch (Exception e) {
e.printStackTrace();
}
return mail;
}
}
执行结果就是title不变,内容发生很大的变化。
仔细观察cloneable接口的实现clone(),进行对象对拷贝,该方法主要是对Mail进行一个clone。
这样做的好处优点在于:
1.性能优良,原型模式是在内存中直接进行二进制拷贝,要比直接new一个对象对速度快很多,特别是在大量的进行循环中
2.逃避构造函数的一些约束,它是直接内存拷贝,不用执行够着函数的。当然缺点就是减少了约束。
在使用中根据自己的一些情况合理的应用。
使用场景描述:
通常用于一个类有多个修改者的场景,并且初始化需要很多资源。