原型模式——创建型设计模式四

原型模式与深浅复制
本文介绍了原型模式的概念及其在创建可定制对象时的应用。通过克隆而非实例化对象,提高了代码效率。并详细讲解了浅复制与深复制的区别及实现方法。

一、原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

 

用实例来说话:我要发简历,自己写了一份模板,然后复制了N 份。如下:

//模板:class Resume

{

Private string name;

Public  Resume (string name)

{

This.name=name;

}

}

//客户端:

Static void Main(string[] args)

{

Resume a=new Resume("大鸟");

Resume b=new Resume("大鸟");

Resume b=new Resume("大鸟");

}


 

如果现在我想改,那就得把N份全改了,本来只是改动一点,却需要很长时间,没效率,真是费力不讨好的工作。

 

原型模式可以改变这种低级费力的工作。

 

原型模式其实就是从一个对象在创建灵位一个可定制的对象,而且不需知道任何创建的细节。在原型模式通过克隆Clone来实现对象之间的这种定制。

区别:以前的复制是每个对象都去实例化类,现在的克隆,是只实例化一个对象,然后通过这个对象传递给其他对象。

具体如下:

class Resume

{

Private string name;

Public  Resume (string name)

{

This.name=name;

}

//模板中增加克隆方法

Public object Clone()

{

Return (Object)this.MemberwiseClone();

}

}

 

 

Static void Main(string[] args)

{

Resume a=new Resume("大鸟");

Resume b=(Resume)a.clone();

Resume c=(Resume)a.clone();

}

 

Clone方法时将当前对象的非静态字段复制到该新对象,如果字段是值类型,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象。

有人有问了,那我要向实现将引用的对象也克隆过来怎么办?

上边的方法在模板中添加Clone 是一种浅复制,还有一种深复制,可以解决克隆引用对象的问题。

深复制

深复制需要增加三步:

1、让引用的类也继承系统的克隆类Icloneable,在类中添加克隆方法。

2、在调用类中,增加以被调用类为参数的私用构造函数,结果返回被调用类克隆方法,从而实现克隆。

3、在调用类的克隆方法中,调用私用构造方法,让引用克隆完成。

假如工作经历类为要调用的类:

1、让工作经历类继承接口

Class WorkExperience :Icloneable

{

//增加克隆方法

Public Object Clone()

{

Return (Object) this.MemberwiseClone();

}

}


2、在简历类中增加私有构造函数

Private Resume(WorkExperience work)

{

This.work=(WorkExperience)work.Clone();

}


 

3、修改简历类中的克隆方法。

public Object Clone()

{

Resume obj=new Resume(this.work);

 

……

}

 


 

二、类图

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值