美文网首页
设计模式之旅6--原型模式

设计模式之旅6--原型模式

作者: 小楠总 | 来源:发表于2018-07-15 22:57 被阅读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关键字)

相关文章

网友评论

      本文标题:设计模式之旅6--原型模式

      本文链接:https://www.haomeiwen.com/subject/fwkwuftx.html