天天看點

樂在其中設計模式(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,如需轉載請自行聯系原作者

繼續閱讀