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

原创 2005年03月04日 10:24:00

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的值了

         }       

     }     

}

设计模式之原型模式详解与应用

购买正版视频,提供购买订单号,可以享受以下服务: 1)学员老师一对一交流服务 2)课后作业和思考题服务 3)咨询服务(工作规划、经验交流) 4)购买【盗版视频】无法获得所有的源代码、课件及服务。
  • 2018年02月05日 23:25

浅谈Java设计模式(五)原型模式(Prototype)

前言: 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在...
  • caihongdao123
  • caihongdao123
  • 2016-07-08 16:41:35
  • 7955

设计模式总结之Prototype Pattern(原型模式)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
  • cooldragon
  • cooldragon
  • 2016-08-11 00:43:16
  • 1839

iOS 设计模式之原型模式 (Prototype)

原型模式从一个对象在创建另一个对象,而不需知道任何创建细节。一般在初始化信息不变化的情况下,使用原型模式是最好的方法,即隐藏了对象创建的细节,对性能又大大提高。在 iOS 开发中,体现原型模式的是 c...
  • a12a33
  • a12a33
  • 2016-02-23 09:36:20
  • 473

java设计模式-原型模式(浅复制,深复制)

使用场景: 多次创建重复的类,每个类又需要非常繁琐的数据准备和访问权限。原型模式类似用new创建出来的类,但又不new的类,new出来的类属性都是默认值,而用原型模式克隆出来的类,属性都和原对象一样...
  • yingxiake
  • yingxiake
  • 2016-05-24 21:32:51
  • 374

软件设计模式——原型模式(Prototype)

定义与结构原型模式属于对象创建模式,我们从名字即可看出该原型模式的思想就是将一个对象作为原型,其进行复制、克隆产生和类似的新对象。GOF给它的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型...
  • Jungle_hello
  • Jungle_hello
  • 2016-04-19 16:43:30
  • 518

iOS 21种设计模式之原型模式Prototype

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow感谢感谢《Pro Objective-C ...
  • Hello_Hwc
  • Hello_Hwc
  • 2015-12-21 23:08:34
  • 1801

Unity游戏设计模式(三)原型模式(Prototype Pattern)

原型模式,顾名思义就是通过对象的原型克隆而产生的新的对象。原型模式在游戏中运用非常多。怪物,一张地图上有许许多多的怪物,这些怪物一般都具有共通性,同一种怪物就有可能拥有同样的模型,同样的攻击方式等。即...
  • RinKas
  • RinKas
  • 2016-10-08 19:49:44
  • 1042

JavaScript prototype原型和原型链详解

用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,...
  • i10630226
  • i10630226
  • 2015-10-21 14:25:50
  • 1795

C# 设计模式-原型(Prototype)

用具体原型实例创建具体对象,并通过克隆该原型创建新对象原型和工厂的区别: - 工厂相当于创建新的原型类来获取新对象。 - 原型通过克隆已存在的原型类来获取新对象。抽象原型、具体原型using...
  • m0_37862405
  • m0_37862405
  • 2017-12-25 18:46:47
  • 25
收藏助手
不良信息举报
您举报文章:C#设计模式之原型(ProtoType)
举报原因:
原因补充:

(最多只允许输入30个字)