设计模式之原型设计(java实现)深浅拷贝详解

代码如下:

interface Monkey{
	public void show();
	public Monkey clone();
}
class Mon {
	Mon(String name){
		this.name=name;
	}
	Mon(Mon mp){
		this.name=mp.name;
	}
	public Mon clone(){
		return new Mon(this);
	}
	
	public String name;
}
class SunWuKong implements Monkey{
	
	public Monkey clone(){
		return new SunWuKong(this);
	}
	public void show(){
		System.out.println(this.my_mon);
		System.out.println(this.my_mon.name+"金箍棒");
	}
	SunWuKong(Mon mp){
		this.my_mon=new Mon(mp.name);
		//System.out.println(this.my_mon);
	}
	SunWuKong(SunWuKong sun){
	this.my_mon=sun.my_mon.clone();
	
	}
	
	
	protected Mon my_mon;
}
public class Demo{
	public static  void main(String[]argv){
		Mon m0=new Mon("孙");
		Monkey mm=new SunWuKong(m0);
		Monkey mm2=mm.clone();
		Monkey mm3=mm.clone();
		Monkey mm4=mm.clone();
		mm.show();
		mm2.show();
		mm3.show();
		mm4.show();
		
		
	}
}

原型模式就是我们面对复杂的对象时,我们可以通过拷贝的方式简化我们的代码

思路:

                1.抽象出一个带有拷贝自身的接口,和我们需要抽象出来的功能

                2.创建实现抽象接口的类

                这个时候我们需要写一个构造函数,能让我们创建出具体的实例对象

                3.写能构造出成员的构造函数

                接下来我们要写一个拷贝构造函数,用来我们实现拷贝结构的返回值

                4.写拷贝构造函数,通过自身这个类构造出一个新的一模一样的类

                 注意:这个时候我们如果想构造出引用数据类型,就不能用浅拷贝,必须使用深拷贝

                5.实现拷贝接口,返回自身的一个对象

                这时候我们就实现了原型模式,只需要构造一次对象,接下来用拷贝的接口创建即可

类图如下:

    

深拷贝与浅拷贝详解

                浅拷贝:a和b我们都是通过访问c的地址拿到里面的数据

                                也就是a和b共用访问一个内存段

                如果说是引用数据类型,那么我们a释放内存,b再释放内存,显然b释放了已经释放的内存,显然我们不想这么做,我们就需要深拷贝

 深拷贝:我们的a和b都动态内存分配,我们在 内存里面a和b都有属于自己的内存

                这样我们释放资源时不会引发内存错误

class Mon {
	Mon(String name){
		this.name=name;
	}
	Mon(Mon mp){
		this.name=mp.name;
	}
	public Mon clone(){
		return new Mon(this);
	}
	
	public String name;
}

比如我们现在用的是Mon类,我们想进行拷贝时,我们就需要深拷贝

我们在构建Mon类时我们是new出来我们所需对象,通过我们的接口clone来返回

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值