原型模式

1、介绍

定义:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节

实现方式:
通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

使用情况:
很多时候,创建对象的时候,只是在某些属性值上有区别,而大部分都很相似,该类的用户对于该类的对象是怎么创建的,对类的内部结构这些都不关心的情况,但是这样的对象的初始化相对来说比较复杂,而且需要耗费较长的时间或资源,这种情况下,我们可以考虑使用Prototype模式。

2、浅度克隆

浅度复制:对于对象中的其他对象的引用复制的其实就是对象的句柄,仍然是同一个对象。我们操作的仍然是同一个对象,改变其中一个对象,另外的对象也会随之发生改变。 这就是浅度复制。

public class User implements  Cloneable{
	//自定义类
	public Order o ;
	public	User(Order o) {
		this.o = o;
	}
	//普通克隆:基本类型克隆
	@Override
	public User clone()   {
		User user = null;
		try {
			user = (User) super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return user;
	}
}

3、深度克隆

深度复制或者克隆来说,复制后会生成不同的对象。也就是同样创建了另外的对象

最方便的就是使用序列化的机制,注意对象中的属性如果是对象的话,包含的对象也必须实现序列化接口,这样才能被序列化

public class User implements  Serializable{
	private static final long serialVersionUID = 3917627620747178660L;
	//自定义类
	public Order o ;
	public	User(Order o) {
		this.o = o;
	}
	public User deepClone() throws Exception {
		// 先对象序列化
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutput out = new ObjectOutputStream(baos);
		out.writeObject(this);
		// 对象反序列化
		ByteArrayInputStream bin = new ByteArrayInputStream(baos.toByteArray());
		ObjectInput in = new ObjectInputStream(bin);
		
		// 返回对象
		return (User) in.readObject();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值