1.介绍
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象,是一种创建型设计模式,允许对象再创建另外一个可定制的对象,无需知道如何创建的细节。
传统的方式复制一个对象
public class Sheep{
private String name;
private int age;
private String color
set()...
get()..
}
public class Client{
main(){
Sheep sheep = new Sheep("tom",1,"白色")
Sheep sheep1 = new Sheep(sheep.getName(),sheep.getAge(),sheep.getColor())
Sheep sheep2 = new Sheep(sheep.getName(),sheep.getAge(),sheep.getColor())
}
}
缺点:
(1)在创建对象时,需要重新获取对象的属性值,如果创建的对象比较复杂,效率低
(2)需要初始化对象,而不是动态地获得对象运行时的状态,不够灵活
克隆模式
public class Sheep implements{
private String name;
private int age;
private String color
set()...
get()..
// 使用默认方法
protected Obeject clone() throws CloneNotSupportedException{
Sheep sheep = null;
sheep = (Sheep)super.clone();
return sheep;
}
}
public class Client{
main(){
Sheep sheep = new Sheep("tom",1,"白色")
Sheep sheep1 = (Sheep)sheep.clone();
}
}
2.深拷贝和浅拷贝
(1)浅拷贝
对于数据类型是基本数据类型的成员变量,浅拷贝会直接会直接进行值的传递,如果是引用类型的成员变量,会进行引用传递,在这种情况下,如果一个对象的成员变量改变,会影响到另一个对象,在java中,浅拷贝使用默认的clone()实现的
(2)深拷贝
复制对象的所有基本数据类型,为引用数据类型开辟新的内存空间。再java中,重写clone方法或者使用序列化方法实现深拷贝
3.js中的克隆模式
Object.create使用了原型模式的思想,基于原型创建一个对象
const prototype = {
getName:function(){
return '111'
}
}
const x = Object.create(prototype)