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

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


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


作者: webabcd


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


示例
有一个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; 
                 /// <summary> 
                 /// Message内容 
                 /// </summary> 
                 public  string Message 
                { 
                        get {  return _message; } 
                        set { _message = value; } 
                } 
 
                 private DateTime _publishTime; 
                 /// <summary> 
                 /// Message发布时间 
                 /// </summary> 
                 public DateTime PublishTime 
                { 
                        get {  return _publishTime; } 
                        set { _publishTime = value; } 
                } 
        } 
}
 
ShallowCopy
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Prototype 

         /// <summary> 
         /// 浅拷贝 
         /// </summary> 
         public  class ShallowCopy : ICloneable 
        { 
                 /// <summary> 
                 /// 构造函数 
                 /// </summary> 
                 public ShallowCopy() 
                { 
                         
                } 
 
                 /// <summary> 
                 /// 实现ICloneable的Clone()方法 
                 /// </summary> 
                 /// <returns></returns> 
                 public Object Clone() 
                { 
                         return  this.MemberwiseClone(); 
                } 
 
                 private MessageModel _mm; 
                 /// <summary> 
                 /// Message实体对象 
                 /// </summary> 
                 public MessageModel MessageModel 
                { 
                        get {  return _mm; } 
                        set { _mm = value; } 
                } 
        } 
}
 
DeepCopy
using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace Pattern.Prototype 

         /// <summary> 
         /// 深拷贝 
         /// </summary> 
         public  class DeepCopy : ICloneable 
        { 
                 /// <summary> 
                 /// 构造函数 
                 /// </summary> 
                 public DeepCopy() 
                { 
                         
                } 
 
                 /// <summary> 
                 /// 构造函数 
                 /// </summary> 
                 /// <param name="mm">Message实体对象</param> 
                 public DeepCopy(MessageModel mm) 
                { 
                        _mm = mm; 
                } 
 
                 /// <summary> 
                 /// 实现ICloneable的Clone()方法 
                 /// </summary> 
                 /// <returns></returns> 
                 public Object Clone() 
                { 
                         return  new DeepCopy( new MessageModel(_mm.Message, _mm.PublishTime)); 
                } 
 
                 private MessageModel _mm; 
                 /// <summary> 
                 /// Message实体对象 
                 /// </summary> 
                 public MessageModel MessageModel 
                { 
                        get {  return _mm; } 
                        set { _mm = value; } 
                } 
        } 
}
 
client
using System; 
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); 
                Response.Write( "<br />"); 
 
                sc.MessageModel.Message =  "ShallowCopyShallowCopy"
 
                Response.Write(sc.MessageModel.Message); 
                Response.Write( "<br />"); 
                Response.Write(sc2.MessageModel.Message); 
                Response.Write( "<br />"); 
        } 
 
         private  void ShowDeepCopy() 
        { 
                DeepCopy sc =  new DeepCopy(); 
                sc.MessageModel =  new MessageModel( "DeepCopy", DateTime.Now); 
 
                DeepCopy sc2 = (DeepCopy)sc.Clone(); 
 
                Response.Write(sc.MessageModel.Message); 
                Response.Write( "<br />"); 
                Response.Write(sc2.MessageModel.Message); 
                Response.Write( "<br />"); 
 
                sc.MessageModel.Message =  "DeepCopyDeepCopy"
 
                Response.Write(sc.MessageModel.Message); 
                Response.Write( "<br />"); 
                Response.Write(sc2.MessageModel.Message); 
                Response.Write( "<br />"); 
        } 
}
 
 
运行结果
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 ,如需转载请自行联系原作者

相关文章
|
2月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy&lt;T&gt;` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
37 1
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑】设计模式——原型模式
对比原型模式和传统方式的实现思路、代码方案、优缺点,阐述原型模式的使用场景,以及深拷贝、浅拷贝等相关概念,并扩展原型模式在Spring源码中的应用。
【Java笔记+踩坑】设计模式——原型模式
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 Java
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
|
3月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
4月前
|
设计模式 算法 C#
C#设计模式之策略模式
C#设计模式之策略模式
87 19
|
4月前
|
设计模式 安全 程序员
C#设计模式之单例模式
C#设计模式之单例模式
52 3
|
5月前
|
设计模式
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
52 6