原型模式

三. 原型模式
整理自 《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();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值