[设计模式] 浅谈原型模式
原型模式
模式功能说明:通过复制一个已经存在的实例来返回新的实例,而不是通过新建一个实例。
模式思路与原理
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。clone明显是深复制,clone出来的对象是是不能去影响原型对象的
案例
假设我们要创建一个复杂的Pizza对象,它包括底饼、酱料、配料等部分。
public class Sheep implements Cloneable {
private String name;
public Sheep(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public Sheep clone() {
try {
return (Sheep) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError(); // Can't happen
}
}
}
public class PrototypeExample {
public static void main(String[] args) {
Sheep original = new Sheep("Jolly");
System.out.println(original.getName()); // Output: Jolly
Sheep copy = original.clone();
copy.setName("Dolly");
System.out.println(copy.getName()); // Output: Dolly
}
}
通过复制original这个已经存在的Sheep实例,我们创建了一个新的Sheep实例copy,并且我们可以对copy进行修改而不影响original。
总结
原型模式的本质就是clone,可以解决构建复杂对象的资源消耗问题,能再某些场景中提升构建对象的效率;还有一个重要的用途就是保护性拷贝,可以通过返回一个拷贝对象的形式,实现只读的限制。