定义:原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
适用场景:
1、类初始化消耗资源过多
2、new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
3、构造函数比较复杂
4、循环体中生产大量对象时
优点:
性能优良,java自带的原型模式是基于内存二进制流的拷贝,比直接new一个对象性能上提升了许多。
可以使用深克隆方式保存对象的状态。使用原型模式将对象复制一份,并将其状态保存起来,简化创建的过程,以便在需要的时候使用(如恢复到某一历史状态),可辅助实现撤销操作。
缺点:
1、必须配备克隆(或者可拷贝)方法
2、当对已有类进行改造的时候,需要修改代码,违反了开闭原则
3、深拷贝、浅拷贝需要运用得当
深克隆: 值复制-只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存, 所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
浅克隆:引用复制-将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。
源码应用:
1)浅克隆:
BeanUtils.copyproperties() ;
Java 中 Object 类是所有类的根类,Object 类提供了一个 clone()方法(调用 clone方法的Java类必须要实现一个接口Cloneable,这是一个标志接口,标志该类能够复制且具有复制的能力,如果不实现 Cloneable 接口,直接调用clone方法,会抛出 CloneNotSupportedException 异常),默认是浅克隆;
2)深克隆:重写Object类的clone方法,将 Java 对象值复制一份