原型模式
Prototype Pattern
定义:
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype
用原型实例指定创建对象的种类,并且通过拷贝这些原型来新的对象
原型模式的核心就是clone方法,通过clone方法进行对象的拷贝,而不是new一个对象。
在JAVA中提供了Cloneable接口来标识该对象是可以拷贝的。
通用代码:
public class PrototypeClass implements Cloneable {
//覆写父类Object的clone方法
@Override
public PrototypeClass clone() {
PrototypeClass prototypeClass = null;
try {
prototypeClass = (PrototypeClass) super.clone();
} catch (CloneNotSupportException e) {
//处理
}
return prototypeClass;
}
}
原型模式很简单,实现Cloneable接口,然后覆写下clone方法。
优点:
- 因为是进行内存的拷贝,比直接new一个对象性能更好。
- 因为不会执行构造函数,所以减少了一定的约束。但是这也是需要被注意的地方!!!
应用:
- 需要频繁new一个对象的时候,可以考虑使用原型模式
- 一个对象需要提供给多个修改者使用的时候,可以考虑使用原型模式拷贝多个对象提供其使用。
注意:
深拷贝和浅拷贝:
java中Object的clone方法的只是浅拷贝,对于对象内部的数组,引用对象等都不会进行内存拷贝,只是对引用或者地址拷贝了。在java中的基本类型int、long、char等还有String类型的拷贝是拷贝内存的。
深拷贝就需要在类中clone方法中把成员对象也进行内存拷贝
clone和final:
对象的clone和final是有冲突的。所以要使用clone方法就不能在成员变量中进行final修饰。