什么是原型模式
定义:通过创建一个原型对象,然后拷贝该原型对象来创建新的对象,新的对象与原型实例类型一致。
特点:
- 创建型类型设计模式
- 克隆对象不调用构造函数,不需要知道对象创建细节
- 原型克隆出的对象比直接new的对象性能高,因为克隆对象调用Object的clone方法,该方法直接调用native层的clone方法,拷贝内存中的二进制流,所以要比直接new对象性能高。
缺点:
- 必须配备克隆方法,需要实现Cloneable接口,重写clone方法;
- 需要注意浅拷贝、深拷贝问题:Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝;
- 会破坏单例模式,原型模式允许克隆对象,所以单例模式和原型模式是相对的;
应用场景
原型模式主要用于对象的复制,所以这种模式的适应场景是:
- new一个对象需要繁琐的过程,比如要传多个参数,初始化一些变量等
- 创建的是一个大对象,类初始化需要消耗大量资源
一般遍历循环创建一个对象时,就可以使用原型模式,下面使用一个示例实现一下原型模式:
代码实现
1、一般使用先创建一个抽象类,实现Cloneable接口,重写clone方法,代码如下:
public abstract class ACar implements Cloneable{
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
2、创建Car类继承父类,并且实现clone方法,代码如下:
public class Car extends ACar{
private int name;
private String engine;
private String wheel;
private String cpu;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
// 省略get、set方法
}
测试程序
public class Test {
public<