1.概述:原型模式
-通过new 对象产生一个对象需要非常繁琐的数据准备或者访问权限,这个时候可以使用原型模式来实现;
-就是Java中的克隆技术,以某个对象为原型,复制新的对象。显然新的对象会具备原型对象的所有特点。
优势:
效率高,直接克隆,避免了重新执行构造过程的步骤。
--克隆类似于new,但是不同于new。new 创建新的对象属性采用的是默认值。但是,克隆出的对象的属性值完全和
原型对象相同,并且克隆出的新对象不会影响原型对象,还可以进行修改克隆对象里面的值;
原型模式的实现:
方法一:····实现Cloneable接口和clone方法
【~克隆和拷贝是一回事~】
//浅克隆
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
//深克隆
@Override
protected Object clone() throws CloneNotSupportedException {
Object obj = super.clone();
}
//深克隆(连同属性一起)
Sheep2 s = (Sheep2)obj;
s.birthday = (Date) this.birthday.clone();
return obj;
}
方法二:使用序列化和反序列化
首先在原型类上实现Serializable接口,
-==-关键代码:(这里以Sheep类为依据)
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(s1);
byte[] bytes = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
Sheep s2 = (Sheep) ois.readObject();
3.开发中的应用场景
---原型模式很少出现,一般是和工厂方法模式一起出现,通过clone()方法创建一个对象,然后由工厂方法提供给调用者。
--- Spring中bean的创建实际就是两种:单例模式和原型模式。(原型模式需要和工厂模式搭配起来)