栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA设计模式(5)创建型-原型模式(深/浅拷贝)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA设计模式(5)创建型-原型模式(深/浅拷贝)

原型模式其实java Object中已经提供了一个Clone( )方法,平时很少用到,最近读Retrofit源码时候看到有这种使用方式。

深浅拷贝的区别:
    浅拷贝是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的对象”复制进去,所以原始对象和新对象引用同一对象,新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。
    深拷贝是在引用方面不同,深拷贝就是创建一个新的和原始字段的内容相同的字段,是两个一样大的数据段,所以两者的引用是不同的,之后的新对象中的引用型字段发生改变,不会引起原始对象中的字段发生改变

//author: V: jbossjf 
public class Mail implements Cloneable {
    ...
    ...
    ...
    	// 进行浅拷贝
    	@Override
    	protected Mail clone() throws CloneNotSupportedException {
    		Mail mail = (Mail) super.clone();
    		return mail;
    	}
    
    }
  package ShallowCopy;
    
    import java.util.ArrayList;
    
    
    
    public class Client {
       public ArrayList getShallowCopyArrayList() {
    		return shallowCopyArrayList;
    	}
    
    	public void setShallowCopyArrayList(ArrayList shallowCopyArrayList) {
    		this.shallowCopyArrayList = shallowCopyArrayList;
    	}
    
    	ArrayList shallowCopyArrayList = new ArrayList();
    
    	public static void main(String[] args) {
    
    		ShallowOne shallowOne = new ShallowOne();
    
    		ArrayList strings = shallowOne.getShallowCopyArrayList();
    
    		strings.add("张三");
           //浅拷贝 
    		ArrayList cloneObject = (ArrayList) strings.clone();
    
    		cloneObject.add("李四");
    
    		System.out.println(cloneObject.toString());
            //深拷贝
            this.shallowCopyArrayList = (ArrayList)
    		 this.shallowCopyArrayList
    		 .clone();
    	}
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号