三. 原型模式
整理自 《java与模式》阎宏编著
1.意图:
用原型对象指定要创建的对象的类型,并且通过拷贝这些原型对象创建新的同类型对象。
2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10041/f72d23b1-a248-34e3-94c2-b9c7d958d531.jpg[/img]
3.原理:
通过拷贝一个现有的对象来生成新的同类型的对象。
4.特征:
5.说明:
克隆必须满足的条件:
a.对任何的对象x,都有:x.clone() != x,即克隆对象与原对象不是同一个对象。
b.对任何的对象x,都有:x.clone().getClass() == x.get getClass(),即克隆对象与原对象的类型是一样的。
c.如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的。
在java中实现clone()应该满足这三个条件。
浅复制:复制了值类型对象,对于引用类型对象,只复制了引用,它指向原来引用的对象。Java中clone为浅复制。
深复制:对值类型和引用类型的对象都生成一份新的拷贝. Java中可以通过串行化来进行深复制,前提是对象以及对象内部所引用的对象都是可串行化的,否则需要考虑将那些不可串行化的对象可否设为transient,排除在复制过程之外。
6.使用案例:
7.代码:
//使用串行化进行深复制的方法
public Object deepClone()
{
//将对象写到流里
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(this);
//从流里读取对象
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);
return oi.readObject();
}
//浅复制
public Object clone()
{
return super.clone();
}
整理自 《java与模式》阎宏编著
1.意图:
用原型对象指定要创建的对象的类型,并且通过拷贝这些原型对象创建新的同类型对象。
2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10041/f72d23b1-a248-34e3-94c2-b9c7d958d531.jpg[/img]
3.原理:
通过拷贝一个现有的对象来生成新的同类型的对象。
4.特征:
5.说明:
克隆必须满足的条件:
a.对任何的对象x,都有:x.clone() != x,即克隆对象与原对象不是同一个对象。
b.对任何的对象x,都有:x.clone().getClass() == x.get getClass(),即克隆对象与原对象的类型是一样的。
c.如果对象x的equals()方法定义恰当的话,那么x.clone().equals(x)应当是成立的。
在java中实现clone()应该满足这三个条件。
浅复制:复制了值类型对象,对于引用类型对象,只复制了引用,它指向原来引用的对象。Java中clone为浅复制。
深复制:对值类型和引用类型的对象都生成一份新的拷贝. Java中可以通过串行化来进行深复制,前提是对象以及对象内部所引用的对象都是可串行化的,否则需要考虑将那些不可串行化的对象可否设为transient,排除在复制过程之外。
6.使用案例:
7.代码:
//使用串行化进行深复制的方法
public Object deepClone()
{
//将对象写到流里
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(this);
//从流里读取对象
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);
return oi.readObject();
}
//浅复制
public Object clone()
{
return super.clone();
}