设计模式之旅6--原型模式
2018-07-15 本文已影响87人
小楠总
1. 定义
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式2. 使用场景
- 资源优化场景:类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。
- 性能和安全要求的场景:通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
- 一个对象多个修改者的场景:一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。
3. 实现
基类需要实现Cloneable接口:
public abstract class Prototype implements Cloneable {
}
子类的代码如下,主要实现了clone方法:
public class ConcretePrototype {
@Override
protected Object clone() {
ConcretePrototype cp = null;
try {
cp = (ConcretePrototype) super.clone();
} catch (Exception e) {
e.printStackTrace();
}
return cp;
}
}
4. 优点
- 性能优良:原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
5. 缺点
- 逃避构造函数的约束(clone的时候,构造函数不会执行):这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,需要在实际应用时考虑。
- 需要注意类中可变引用成员浅拷贝带来的问题,可以考虑使用深拷贝(对成员也进行一次clone,并且赋值给新对象的成员)
- 类成员中有final类型的成员,这个类不能进行clone。(此时应该去掉final关键字)