设计模式之原型模式

       Prototype原型模式:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。原型模式:(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,在Java中原型设计模式已经提供了对语言级别的支持

   原型模式其实就是从一个对象创建另一个可定制的对象,而且不需要知道任何创建细节 JAVA中提供了cloneable接口,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。一般在初始化信息不变的情况下,克隆是最好的办法,既隐藏了对象创建的细节,又大大提高了java中的colne方法,是这样的,如果字段是值类型的,则对该字段是执行逐位复制,如果该字段是引用类型的,则复制的是引用但是不复制引用的对象,既原始对象及副本对象引用同一对象。

代码如下:

设计模式之原型模式


设计模式之原型模式

总结:

原型模式的Prototype类必须继承Cloneable接口,并对接口中的clone方法进行实现,主要的优点与缺点如下:

优点


  1. 使用原型模型创建一个对象比直接new一个对象更有效率,因为它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

  2. 隐藏了制造新实例的复杂性,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。

缺点

  1. 由于使用原型模式复制对象时不会调用类的构造方法,所以原型模式无法和单例模式组合使用,因为原型类需要将clone方法的作用域修改为public类型,那么单例模式的条件就无法满足了。

  2. 使用原型模式时不能有final对象。

  3. Object类的clone方法只会拷贝对象中的基本数据类型,对于数组,引用对象等只能另行拷贝。这里涉及到深拷贝和浅拷贝的概念。