目录
一 原型模式应用场景
原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些
原型创建新的对象
1,类初始化消耗资源过多。
2,new产生一个对象需要非常繁琐的过程。
3,构造函数比较复杂。
4,循环体中产生大量对象时。
二 简单克隆
完整的复制了值类型数据,没有赋值引用对象所有的引用对象任然指向原来的对象。
public class ConcreteProtrotypeA implements IProtrotype {
private String name;
private String sex;
private List hobbies;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public List getHobbies() {
return hobbies;
}
public void setHobbies(List hobbies) {
this.hobbies = hobbies;
}
@Override
public ConcreteProtrotypeA clone() {
ConcreteProtrotypeA concreteProtrotypeA = new ConcreteProtrotypeA();
concreteProtrotypeA.setName(this.name);
concreteProtrotypeA.setSex(this.sex);
concreteProtrotypeA.setHobbies(this.hobbies);
return concreteProtrotypeA;
}
}
三 深度克隆
完整的复制了数据,每个对象的引用对象也是独的
例子: 我们都知道齐天大圣,拔一个毫毛可以吹出成千上万个猴子,猴子手术都拿着的是金箍棒。
public Object deepClone() {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
oos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
PeasShooter cope = (PeasShooter) ois.readObject();
cope.birthday = new Date();
return cope;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}