打字猴:1.700461723e+09
1700461723 设计模式之禅 [:1700453970]
1700461724 设计模式之禅 13.3 原型模式的应用
1700461725
1700461726 13.3.1 原型模式的优点
1700461727
1700461728 ❑性能优良
1700461729
1700461730 原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
1700461731
1700461732 ❑逃避构造函数的约束
1700461733
1700461734 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的(参见13.4节)。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
1700461735
1700461736
1700461737
1700461738
1700461739 设计模式之禅 13.3.2 原型模式的使用场景
1700461740
1700461741 ❑资源优化场景
1700461742
1700461743 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。
1700461744
1700461745 ❑性能和安全要求的场景
1700461746
1700461747 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
1700461748
1700461749 ❑一个对象多个修改者的场景
1700461750
1700461751 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。
1700461752
1700461753 在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。原型模式已经与Java融为一体,大家可以随手拿来使用。
1700461754
1700461755
1700461756
1700461757
1700461758 设计模式之禅 [:1700453971]
1700461759 设计模式之禅 13.4 原型模式的注意事项
1700461760
1700461761 原型模式虽然很简单,但是在Java中使用原型模式也就是clone方法还是有一些注意事项的,我们通过几个例子逐个解说。
1700461762
1700461763 13.4.1 构造函数不会被执行
1700461764
1700461765 一个实现了Cloneable并重写了clone方法的类A,有一个无参构造或有参构造B,通过new关键字产生了一个对象S,再然后通过S.clone()方式产生了一个新的对象T,那么在对象拷贝时构造函数B是不会被执行的。我们来写一小段程序来说明这个问题,如代码清单13-8所示。
1700461766
1700461767 代码清单13-8 简单的可拷贝对象
1700461768
1700461769 public class Thing implements Cloneable{
1700461770
1700461771 public Thing(){
1700461772
[ 上一页 ]  [ :1.700461723e+09 ]  [ 下一页 ]