乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
介绍
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
示例
有一个Message实体类,现在要克隆它。
MessageModel
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Prototype
{
/// <summary>
/// Message实体类
/// </summary>
public class MessageModel
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="msg">Message内容</param>
/// <param name="pt">Message发布时间</param>
public MessageModel(string msg, DateTime pt)
{
this._message = msg;
this._publishTime = pt;
}
private string _message;
/// Message内容
public string Message
get { return _message; }
set { _message = value; }
private DateTime _publishTime;
/// Message发布时间
public DateTime PublishTime
get { return _publishTime; }
set { _publishTime = value; }
}
}
ShallowCopy
/// 浅拷贝
public class ShallowCopy : ICloneable
public ShallowCopy()
/// 实现ICloneable的Clone()方法
/// <returns></returns>
public Object Clone()
return this.MemberwiseClone();
private MessageModel _mm;
/// Message实体对象
public MessageModel MessageModel
get { return _mm; }
set { _mm = value; }
DeepCopy
/// 深拷贝
public class DeepCopy : ICloneable
public DeepCopy()
/// <param name="mm">Message实体对象</param>
public DeepCopy(MessageModel mm)
_mm = mm;
return new DeepCopy(new MessageModel(_mm.Message, _mm.PublishTime));
client
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Pattern.Prototype;
public partial class Prototype : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
Response.Write("ShallowCopy演示如下:<br />");
ShowShallowCopy();
Response.Write("DeepCopy演示如下:<br />");
ShowDeepCopy();
private void ShowShallowCopy()
ShallowCopy sc = new ShallowCopy();
sc.MessageModel = new MessageModel("ShallowCopy", DateTime.Now);
ShallowCopy sc2 = (ShallowCopy)sc.Clone();
Response.Write(sc.MessageModel.Message);
Response.Write("<br />");
Response.Write(sc2.MessageModel.Message);
sc.MessageModel.Message = "ShallowCopyShallowCopy";
private void ShowDeepCopy()
DeepCopy sc = new DeepCopy();
sc.MessageModel = new MessageModel("DeepCopy", DateTime.Now);
DeepCopy sc2 = (DeepCopy)sc.Clone();
sc.MessageModel.Message = "DeepCopyDeepCopy";
运行结果
ShallowCopy演示如下:
ShallowCopyShallowCopy
DeepCopy演示如下:
DeepCopyDeepCopy
参考
<a href="http://www.dofactory.com/Patterns/PatternPrototype.aspx" target="_blank">http://www.dofactory.com/Patterns/PatternPrototype.aspx</a>
OK
<a href="http://down.51cto.com/data/100859" target="_blank">[源码下载]</a>
本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344497,如需转载请自行联系原作者