一、场景
创建对象比较耗时的时候,可以拷贝原型,再进行修改;是基于内存的操作
二、原理
原型模式=客户模式=拷贝模式
包括浅克隆和深克隆
浅克隆:只复制原型,克隆对象和原型共同指向原型的对象属性
深克隆:将原型的属性也进行复制
三、开发中的应用场景
四、Java中原型模式的使用
注:此处重写的是Object类中的clone()方法;Object类中的clone()方法是本地方法,调用的是C代码,所以效率很高;
执行clone操作:
结果显示:克隆的对象和原型是两个对象,但值是一样的
也可以重新赋值:
注意,以上为浅克隆,因为都指向同一个Date对象,当s1该变Date值时,s2的Date值也会变;
深克隆1:
复制s1时,将Date也复制一份,即s1用到的所有对象都进行复制。
代码实现:
则s1修改属性不会影响到s2
结果,修改s1不影响s2的date:
深克隆2:
利用序列化和反序列化实现深克隆
代码实现:
结果说明修改s1属性不影响说, 因为反序列化是把原型对象的属性也进行了反序列化,所以相当于复制了一份。
四、测试原型模式节省的时间
将要被创建的对象:
普通new的方式创建对象测试方法:
clone方式创建对象测试方法:
执行测试方法:
结果,可见clone的方式很节省时间
测试总结:
new对象越耗时,普通new方式和clone方式差异越大。