简介
原型模式是为了创建一个重复的对象,可以想象成克隆。有了原型模式,我们创建重复的对象时就不需要将原来对象的属性都传到新对象里,这样可以大大提升效率,提升性能。
原型模式是一种创建型设计模式,允许通过一个对象克隆出一个新的对象,无需知道其中任何细节,并且这个克隆出的对象会随着原始对象的变化而变化。
实现就是将克隆的过程交给原始对象。原型定义一个克隆的方法,原始对象实现这个原型的克隆方法,然后通过调用这个克隆方法就可以实现克隆出一个一摸一样的新对象。
所以,支持克隆的对象就称为原型。
实现代码
public class Sheep implements Cloneable{
public String name;
public String age;
public Sheep friend;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Sheep{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", friend=" + friend +
'}';
}
}
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Sheep sheep = new Sheep();
sheep.name = "小羊";
sheep.age = "1";
Sheep firend = new Sheep();
firend.name = "大羊";
firend.age = "2";
sheep.friend = firend;
Sheep clone = (Sheep) sheep.clone();
System.out.println(sheep);
System.out.println(clone);
}
}
执行结果:
上面代码中Clonable接口就是我们所说的原型,它定义了一个可克隆的接口,Sheep就是原型类,它可以通过clone来克隆一个新的Sheep对象。
浅拷贝
浅拷贝就是对于一个对象,对于它的基本数据类型,会直接进行值传递,但是对于引用数据类型则只是引用传递,就是新对象的引用数据类型的属性指向老对象的属性,而不是创建一个新对象。
深拷贝
深拷贝则反之,基本数据类型会进行值传递,引用数据类型也会创建一个新的对象,然后引用数据类型指向新的对象。