设计模式之原型模式

    原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。说白了就是将对象复制一遍,在将其赋给一个新的对象变量。由于这种方法太常用,所以.NETSystem命名空间中提供了ICIoneable接口,其中就只有唯一的一个方法Clone(),实现了这个接口就可以完成原型模式。举个简单的例子:毕业找工作需要投递简历的,而复制则是一个非常方便的方法。转成代码则如下:

class Resume:ICloneable         
{
	private string name;
	private string timeArea;
	private string company;
 
	public Resume(string name)
	{
		this.name=name;
	}
	public void SetWorkExperience(string timeArea,string company)
	{
		this.timeArea=timeArea;
		this.company=company;
	}
 
	public void Display()
	{
		console.WriteLine("信息:{0} {1} {2}",name,timeArea,company);
	}
	//实现接口方法
	Public Object Clone()
	{
		return (Object)this.MemberwiseClone();
	}
}

在客户端代码调用如下


Resume a=new Resume("tom")
Resume b=(Resume)a.Clone();     //克隆对象a,赋值给对象b
 
a.Display();
b.Display();

    在此在进行深化,有关浅复制和深复制,依个人理解:浅复制就是像上面一般的复制,复制的模板就一个实体,而深复制则是复制成为一个一个的实例。主要解决类中包含引用的问题。

像上面如果将属相timeAreacompany拿出来组合成为一个单独的实例WorkExperience,则在类中Resume中只能引用这个WorkExperience类,而在复制的时候只是复制的引用而不是复制真实的对象。所造成的结果就是工作经历完全的一样。

解决方法就是通过深复制将工作经历类也复制一遍,就可得到一个具体的实例,如下:

class WorkExperience:ICloneable
{
	private string timeArea;
	private string company;
	public string TimeArea
	{
		get {return timeArea;}
		set {timeArea=value;}
	}
	public string Company
	{	
		get {return company;}
		set {company=value;}
	}
	public Object Clone()
	{
		return (Object)this.MemberwiseClone();
	}
}

将简历类Resume中的Clone()方法中实例化简历,再将其他属性进行赋值即可。

 

通过深复制可得到的结果如下(工作经历不相同):

信息:大鸟 1996-2000xx公司

信息:大鸟 2000-2006yy公司

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值