乐在其中设计格局(C#) – 原型格局(Prototype Pattern)

[索引页] [源码下载]

乐在其中设计方式(C#) – 原型方式(Prototype Pattern)

作者:webabcd

介绍
用原型实例指定创设对象的类型,并且经过拷贝那些原型来创制新的目标。

示例
有一个Message实体类,将来要克隆它。
图片 1

MessageModel

图片 2using System;
图片 3using System.Collections.Generic;
图片 4using System.Text;
图片 5
图片 6namespace Pattern.Prototype
图片 7图片 8图片 9{
图片 10图片 11    /**//// <summary>
图片 12    /// Message实体类
图片 13    /// </summary>
图片 14    public class MessageModel
图片 15图片 16    图片 17{
图片 18图片 19        /**//// <summary>
图片 20        /// 构造函数
图片 21        /// </summary>
图片 22        /// <param name=”msg”>Message内容</param>
图片 23        /// <param name=”pt”>Message发布时间</param>
图片 24        public MessageModel(string msg, DateTime pt)
图片 25图片 26        图片 27{
图片 28            this._message = msg;
图片 29            this._publishTime = pt;
图片 30        }
图片 31
图片 32        private string _message;
图片 33图片 34        /**//// <summary>
图片 35        /// Message内容
图片 36        /// </summary>
图片 37        public string Message
图片 38图片 39        图片 40{
图片 41图片 42            get 图片 43{ return _message; }
图片 44图片 45            set 图片 46{ _message = value; }
图片 47        }
图片 48
图片 49        private DateTime _publishTime;
图片 50图片 51        /**//// <summary>
图片 52        /// Message发表时间
图片 53        /// </summary>
图片 54        public DateTime PublishTime
图片 55图片 56        图片 57{
图片 58图片 59            get 图片 60{ return _publishTime; }
图片 61图片 62            set 图片 63{ _publishTime = value; }
图片 64        }
图片 65    }
图片 66}
图片 67

ShallowCopy

图片 68using System;
图片 69using System.Collections.Generic;
图片 70using System.Text;
图片 71
图片 72namespace Pattern.Prototype
图片 73图片 74图片 75{
图片 76图片 77    /**//// <summary>
图片 78    /// 浅拷贝
图片 79    /// </summary>
图片 80    public class ShallowCopy : ICloneable
图片 81图片 82    图片 83{
图片 84图片 85        /**//// <summary>
图片 86        /// 构造函数
图片 87        /// </summary>
图片 88        public ShallowCopy()
图片 89图片 90        图片 91{
图片 92            
图片 93        }
图片 94
图片 95图片 96        /**//// <summary>
图片 97        /// 实现ICloneable的Clone()方法
图片 98        /// </summary>
图片 99        /// <returns></returns>
图片 100        public Object Clone()
图片 101图片 102        图片 103{
图片 104            return this.MemberwiseClone();
图片 105        }
图片 106
图片 107        private MessageModel _mm;
图片 108图片 109        /**//// <summary>
图片 110        /// Message实体对象
图片 111        /// </summary>
图片 112        public MessageModel MessageModel
图片 113图片 114        图片 115{
图片 116图片 117            get 图片 118{ return _mm; }
图片 119图片 120            set 图片 121{ _mm = value; }
图片 122        }
图片 123    }
图片 124}
图片 125

DeepCopy

图片 126using System;
图片 127using System.Collections.Generic;
图片 128using System.Text;
图片 129
图片 130namespace Pattern.Prototype
图片 131图片 132图片 133{
图片 134图片 135    /**//// <summary>
图片 136    /// 深拷贝
图片 137    /// </summary>
图片 138    public class DeepCopy : ICloneable
图片 139图片 140    图片 141{
图片 142图片 143        /**//// <summary>
图片 144        /// 构造函数
图片 145        /// </summary>
图片 146        public DeepCopy()
图片 147图片 148        图片 149{
图片 150            
图片 151        }
图片 152
图片 153图片 154        /**//// <summary>
图片 155        /// 构造函数
图片 156        /// </summary>
图片 157        /// <param name=”mm”>Message实体对象</param>
图片 158        public DeepCopy(MessageModel mm)
图片 159图片 160        图片 161{
图片 162            _mm = mm;
图片 163        }
图片 164
图片 165图片 166        /**//// <summary>
图片 167        /// 实现ICloneable的Clone()方法
图片 168        /// </summary>
图片 169        /// <returns></returns>
图片 170        public Object Clone()
图片 171图片 172        图片 173{
图片 174            return new DeepCopy(new MessageModel(_mm.Message, _mm.PublishTime));
图片 175        }
图片 176
图片 177        private MessageModel _mm;
图片 178图片 179        /**//// <summary>
图片 180        /// Message实体对象
图片 181        /// </summary>
图片 182        public MessageModel MessageModel
图片 183图片 184        图片 185{
图片 186图片 187            get 图片 188{ return _mm; }
图片 189图片 190            set 图片 191{ _mm = value; }
图片 192        }
图片 193    }
图片 194}
图片 195

client

图片 196using System;
图片 197using System.Data;
图片 198using System.Configuration;
图片 199using System.Collections;
图片 200using System.Web;
图片 201using System.Web.Security;
图片 202using System.Web.UI;
图片 203using System.Web.UI.WebControls;
图片 204using System.Web.UI.WebControls.WebParts;
图片 205using System.Web.UI.HtmlControls;
图片 206
图片 207using Pattern.Prototype;
图片 208
图片 209public partial class Prototype : System.Web.UI.Page
图片 210图片 211图片 212{
图片 213    protected void Page_Load(object sender, EventArgs e)
图片 214图片 215    图片 216{
图片 217        Response.Write(“ShallowCopy演示如下:<br />”);
图片 218        ShowShallowCopy();
图片 219
图片 220        Response.Write(“DeepCopy演示如下:<br />”);
图片 221        ShowDeepCopy();    
图片 222    }
图片 223
图片 224    private void ShowShallowCopy()
图片 225图片 226    图片 227{
图片 228        ShallowCopy sc = new ShallowCopy();
图片 229        sc.MessageModel = new MessageModel(“ShallowCopy”, DateTime.Now);
图片 230
图片 231        ShallowCopy sc2 = (ShallowCopy)sc.Clone();
图片 232
图片 233        Response.Write(sc.MessageModel.Message);
图片 234        Response.Write(“<br />”);
图片 235        Response.Write(sc2.MessageModel.Message);
图片 236        Response.Write(“<br />”);
图片 237
图片 238        sc.MessageModel.Message = “ShallowCopyShallowCopy”;
图片 239
图片 240        Response.Write(sc.MessageModel.Message);
图片 241        Response.Write(“<br />”);
图片 242        Response.Write(sc2.MessageModel.Message);
图片 243        Response.Write(“<br />”);
图片 244    }
图片 245
图片 246    private void ShowDeepCopy()
图片 247图片 248    图片 249{
图片 250        DeepCopy sc = new DeepCopy();
图片 251        sc.MessageModel = new MessageModel(“DeepCopy”, DateTime.Now);
图片 252
图片 253        DeepCopy sc2 = (DeepCopy)sc.Clone();
图片 254
图片 255        Response.Write(sc.MessageModel.Message);
图片 256        Response.Write(“<br />”);
图片 257        Response.Write(sc2.MessageModel.Message);
图片 258        Response.Write(“<br />”);
图片 259
图片 260        sc.MessageModel.Message = “DeepCopyDeepCopy”;
图片 261
图片 262        Response.Write(sc.MessageModel.Message);
图片 263        Response.Write(“<br />”);
图片 264        Response.Write(sc2.MessageModel.Message);
图片 265        Response.Write(“<br />”);
图片 266    }
图片 267}
图片 268

运营结果
ShallowCopy演示如下:
ShallowCopy
ShallowCopy
ShallowCopyShallowCopy
ShallowCopyShallowCopy
DeepCopy演示如下:
DeepCopy
DeepCopy
DeepCopyDeepCopy
DeepCopy

参考
http://www.dofactory.com/Patterns/PatternPrototype.aspx

OK
[源码下载]

相关文章