属于创建型模式 (共5种)
Java 内部自带 支持原型模式 object.clone()
目的:
如果要产生的新的对象和原来的对象属性相同,可以直接克隆
用法:
实现一个类的克隆,必须实现 cloneable接口 这是一个标记型接口(接口内没有要实现的方法)
Object类中clone()方法是 protected 修饰的 只有子类可以调用,而且是native方法 C++写的
注意:
从效率上看 克隆并不比new一个对象快 ,只是省去了指定属性的语句
深克隆、浅克隆问题
浅克隆
如果克隆对象属性中包含其他类型的引用型属性,则只会克隆原类中的引用地址,
导致一个类修改引用型属性,另一个已经克隆完成的类也会跟着改变。
深克隆
被克隆类中的引用型属性也实现cloneable接口,重写clone方法;
被克隆主类中,重写克隆方法中再加入引用类型的克隆方法
String类型不需要进行深克隆,String类型指定了常量池,改变属性,改变的是指向常量池中的地址值
