设计模式之原型模式

  原型模式:
      用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象
      使用场景:
      1.类的创建消耗很多资源
      2new一个对象需要繁琐的数据准备
      3一个对象给其他对象使用
 

      Cloneable 接口


import java.util.ArrayList;

public class TestCloneanle implements Cloneable{
	private String mTesxt;
	
	private ArrayList<String> mList = new ArrayList<String>();
	
	public TestCloneanle() {
		System.out.println("构造函数");
	}
	
	@Override
	protected TestCloneanle clone()  {
		
		try {
			TestCloneanle tc = (TestCloneanle) super.clone();
			tc.mTesxt = this.mTesxt;
			tc.mList = this.mList;
			return tc;
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return null;
	}

	public String getmTesxt() {
		return mTesxt;
	}

	public void setmTesxt(String mTesxt) {
		this.mTesxt = mTesxt;
	}

	public ArrayList<String> getmList() {
		return mList;
	}

	public void setmList(String s) {
		this.mList.add(s);
	}
		
	public void show() {
		System.out.println("mtext"+mTesxt);
		
		for (int i = 0; i < mList.size(); i++) {
			System.out.println("mlist::"+i+":::"+mList.get(i));
		}
	}
}

	public static void main(String[] args) {
		TestCloneanle tc = new TestCloneanle();
		tc.setmTesxt("nihao");
		tc.setmList("one");
		tc.setmList("two");
		tc.show();
		
		TestCloneanle tc2 = tc.clone();
		tc2.setmList("three");
		tc2.show();
		tc.show();
	}

运行结果:
构造函数
mtextnihao
mlist::0:::one
mlist::1:::two
mtextnihao
mlist::0:::one
mlist::1:::two
mlist::2:::three
mtextnihao
mlist::0:::one
mlist::1:::two
mlist::2:::three
clone 是不会执行构造函数的

可以看出修改tc2之后 tc也被修改了,这种拷贝方式称之为浅拷贝。


深拷贝:

@Override
	protected TestCloneanle clone()  {
		
		try {
			TestCloneanle tc = (TestCloneanle) super.clone();
			tc.mTesxt = this.mTesxt;
			<span style="color:#FF0000;">tc.mList = (ArrayList<String>) this.mList.clone();</span>
			return tc;
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return null;
	}


结果:

构造函数
mtextnihao
mlist::0:::one
mlist::1:::two
mtextnihao
mlist::0:::one
mlist::1:::two
mlist::2:::three
mtextnihao
mlist::0:::one
mlist::1:::two

就会实际拷贝一份新的出来。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值