设计模式——原型模式

56 阅读2分钟

一.定义

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二.类图

image.png

    原型模式的核心是一个clone方法,通过该方法进行对象的拷贝。Java提供了一个Cloneable接口来标识这个对象是可拷贝的,标识的意思是Cloneable里一个方法都没有的,这个接口只是一个标记作用,在JVM中具有这个标记的对象才有可能被拷贝。

三.优点

  • 性能优良。原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
  • 可以逃避构造函数的约束。

四.使用场景

  • 资源优化场景。如类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等。
  • 性能和安全要求的场景。通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
  • 一个对象多个修改者的场景。在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。原型模式已经和Java融为一体,非常方便实用。

五.注意事项

  • 原型模式产生对象时构造函数不会被执行。
  • 注意浅拷贝和深拷贝的问题。在Java中,Object类提供方法clone拷贝对象时,基本类型和String类型会拷贝,其对象内部的数组、引用对象(引用对象需满足两个条件:一是类的成员变量,二是必须是一个可变的引用对象,而不是一个原始类型或不可变对象)等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝叫做浅拷贝。深拷贝则是全部拷贝,需要重写clone方法。
  • 要使用clone方法,类的成员变量上不要增加final关键字。