浅克隆和深克隆

这是原型设计模式

当我们拥有一个对象 obj_01 的时候,我们想通过拷贝这个对象来得到另一个对象 obj_02,类似于复制粘贴功能。这个过程叫做【克隆】,这个模型就叫做原型模式

细分有2种:浅克隆、深克隆

浅克隆。java 中每个对象都是 Object.java 的子类,Object 有一个方法 clone(),所以每个类都可以通过 super.clone()方法来实现浅克隆。浅克隆会给新对象一个新的内存地址,但是新对象引用类型的成员变量的地址仍然不会改变。待克隆的类必须实现接口 Cloneable,否则会抛出异常

深克隆。深克隆是相较浅克隆而言的,它不仅会改变克隆后新对象的内存地址,它还会给新对象的每一个成员变量重新分配内存地址(即使该成员变量为引用类型)。也就是说新对象和老对象在内存的占用上已经完全不同了,没有任何共用的地方。

 

浅克隆的实现

@Override
	protected Object clone() {
		Object clone=null;
		try {
			clone= super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return clone;
	}

  

深克隆的实现

@Override
	protected Object clone() {
		Object clone = null;
		try{
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
	        ObjectOutputStream oos = new ObjectOutputStream(baos);
	        oos.writeObject(this);
	        
	        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            clone=ois.readObject();
		}catch(Exception e){
			e.printStackTrace();
		}
		return clone;
	}

  

posted on 2019-04-26 13:22  乌云上  阅读(366)  评论(0编辑  收藏  举报

导航