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

简介:
[索引页]
[源码下载]


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


作者: webabcd


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


示例
有一个Message实体类,现在要克隆它。
MessageModel
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif namespace Pattern.Prototype 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// Message实体类 
InBlock.gif         /// </summary> 
InBlock.gif         public  class MessageModel 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 构造函数 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="msg">Message内容</param> 
InBlock.gif                 /// <param name="pt">Message发布时间</param> 
InBlock.gif                 public MessageModel( string msg, DateTime pt) 
InBlock.gif                { 
InBlock.gif                         this._message = msg; 
InBlock.gif                         this._publishTime = pt; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private  string _message; 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// Message内容 
InBlock.gif                 /// </summary> 
InBlock.gif                 public  string Message 
InBlock.gif                { 
InBlock.gif                        get {  return _message; } 
InBlock.gif                        set { _message = value; } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private DateTime _publishTime; 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// Message发布时间 
InBlock.gif                 /// </summary> 
InBlock.gif                 public DateTime PublishTime 
InBlock.gif                { 
InBlock.gif                        get {  return _publishTime; } 
InBlock.gif                        set { _publishTime = value; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
ShallowCopy
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif namespace Pattern.Prototype 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// 浅拷贝 
InBlock.gif         /// </summary> 
InBlock.gif         public  class ShallowCopy : ICloneable 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 构造函数 
InBlock.gif                 /// </summary> 
InBlock.gif                 public ShallowCopy() 
InBlock.gif                { 
InBlock.gif                         
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 实现ICloneable的Clone()方法 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <returns></returns> 
InBlock.gif                 public Object Clone() 
InBlock.gif                { 
InBlock.gif                         return  this.MemberwiseClone(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private MessageModel _mm; 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// Message实体对象 
InBlock.gif                 /// </summary> 
InBlock.gif                 public MessageModel MessageModel 
InBlock.gif                { 
InBlock.gif                        get {  return _mm; } 
InBlock.gif                        set { _mm = value; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
DeepCopy
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif 
InBlock.gif namespace Pattern.Prototype 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// 深拷贝 
InBlock.gif         /// </summary> 
InBlock.gif         public  class DeepCopy : ICloneable 
InBlock.gif        { 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 构造函数 
InBlock.gif                 /// </summary> 
InBlock.gif                 public DeepCopy() 
InBlock.gif                { 
InBlock.gif                         
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 构造函数 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <param name="mm">Message实体对象</param> 
InBlock.gif                 public DeepCopy(MessageModel mm) 
InBlock.gif                { 
InBlock.gif                        _mm = mm; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 实现ICloneable的Clone()方法 
InBlock.gif                 /// </summary> 
InBlock.gif                 /// <returns></returns> 
InBlock.gif                 public Object Clone() 
InBlock.gif                { 
InBlock.gif                         return  new DeepCopy( new MessageModel(_mm.Message, _mm.PublishTime)); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private MessageModel _mm; 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// Message实体对象 
InBlock.gif                 /// </summary> 
InBlock.gif                 public MessageModel MessageModel 
InBlock.gif                { 
InBlock.gif                        get {  return _mm; } 
InBlock.gif                        set { _mm = value; } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
client
InBlock.gif using System; 
InBlock.gif using System.Data; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Collections; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Security; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI.WebControls.WebParts; 
InBlock.gif using System.Web.UI.HtmlControls; 
InBlock.gif 
InBlock.gif using Pattern.Prototype; 
InBlock.gif 
InBlock.gif public partial  class Prototype : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                Response.Write( "ShallowCopy演示如下:<br />"); 
InBlock.gif                ShowShallowCopy(); 
InBlock.gif 
InBlock.gif                Response.Write( "DeepCopy演示如下:<br />"); 
InBlock.gif                ShowDeepCopy();         
InBlock.gif        } 
InBlock.gif 
InBlock.gif         private  void ShowShallowCopy() 
InBlock.gif        { 
InBlock.gif                ShallowCopy sc =  new ShallowCopy(); 
InBlock.gif                sc.MessageModel =  new MessageModel( "ShallowCopy", DateTime.Now); 
InBlock.gif 
InBlock.gif                ShallowCopy sc2 = (ShallowCopy)sc.Clone(); 
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif 
InBlock.gif                sc.MessageModel.Message =  "ShallowCopyShallowCopy"
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif        } 
InBlock.gif 
InBlock.gif         private  void ShowDeepCopy() 
InBlock.gif        { 
InBlock.gif                DeepCopy sc =  new DeepCopy(); 
InBlock.gif                sc.MessageModel =  new MessageModel( "DeepCopy", DateTime.Now); 
InBlock.gif 
InBlock.gif                DeepCopy sc2 = (DeepCopy)sc.Clone(); 
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif 
InBlock.gif                sc.MessageModel.Message =  "DeepCopyDeepCopy"
InBlock.gif 
InBlock.gif                Response.Write(sc.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif                Response.Write(sc2.MessageModel.Message); 
InBlock.gif                Response.Write( "<br />"); 
InBlock.gif        } 
InBlock.gif}
 
 
运行结果
ShallowCopy演示如下:
ShallowCopy
ShallowCopy
ShallowCopyShallowCopy
ShallowCopyShallowCopy
DeepCopy演示如下:
DeepCopy
DeepCopy
DeepCopyDeepCopy
DeepCopy


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


OK
[源码下载]




     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/344497 ,如需转载请自行联系原作者

相关文章
|
1月前
|
设计模式 安全 Java
【设计模式】原型模式
【设计模式】原型模式
|
2月前
|
设计模式 Java 关系型数据库
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
38 1
|
3月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
3月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
39 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
3月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
31 1
|
3月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
39 0
|
10天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
15 1
|
12天前
|
设计模式 Java
小谈设计模式(10)—原型模式
小谈设计模式(10)—原型模式
|
1月前
|
设计模式 Java
设计模式之原型模式
设计模式之原型模式
|
3月前
|
设计模式 存储 JSON
Java设计模式-原型模式
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的`Object clone()`就是原型模式的应用。
30 1
Java设计模式-原型模式