天天看点

乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

乐在其中设计模式(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,如需转载请自行联系原作者