C#设计模式之原型(ProtoType)

1.  为什么要用原型?用原型的好处

比如我们有一个工具栏按钮,新建按钮,它是ToolbarButton的实例,它有长度、宽度属性等,而且属性都赋了值。

现在我们要再添加一个保存按钮,它也是ToolbarButton的实例,它也有长度、宽度属性等,不过它还没赋值,它的值和新建按钮的值一样。

如果我们不用原型设计模式的话,可能重新赋一遍值。如果我们用原型设计模式的话,我们可以把新建按钮作为保存按钮的原型。那样的话就不需要再给保存按钮赋值,它的默认的长度、宽度就和新建按钮一样了。

 

2.  C#中怎样用原型?

因为类的实例是引用类型,要想用原有的类中的实例的数据的话,只能用clone方法。

Clone方法分为深clone和浅clone

C#中提供了浅clone的方法,即为MemberwiseClone()

 

C#Clone的例子:

using System;   

  

namespace DesignPattern

{  

     public class ToolbarButton : ICloneable //实现Clone接口

     {

  

         private int _Width;

         private int _Height;

 

         public ToolbarButton()

         {

         }

 

         public int Width

         {

              get

              {

                   return _Width;

              }

              set

              {

                   _Width=value;

              }

         }

 

         public int Height

         {

              get

              {

                   return _Height;

              }

              set

              {

                   _Height=value;

              }

         }

  

  

         public object Clone()

         {   

              return this.MemberwiseClone();  //返回浅clone方法¨  

         }   

     }

 

     public class Test

     {

         public void TestMethod()

         {

              ToolbarButton mtb_NewButton=new ToolbarButton();

              mtb_NewButton.Width=60;

              mtb_NewButton.Height=30;

 

              ToolbarButton mtb_SaveButton=new ToolbarButton();

              mtb_SaveButton=(ToolbarButton)mtb_NewButton.Clone();

            //这时mtb_SaveButton就有WidthHeight的值了

         }       

     }     

}

posted @ 2004-06-14 13:42  Martin XJ  阅读(1434)  评论(2编辑  收藏  举报