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

         }       

     }     

}

设计模式(创建型)之原型模式(Prototype Pattern)

要理解原型原型模式必须先理解Java里的浅复制和深复制。有的地方,复制也叫做克隆。Java提供这两种克隆方式。 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一...
  • yanbober
  • yanbober
  • 2015年04月29日 11:28
  • 2881

C++设计模式-Prototype原型模式

作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言...
  • u010229420
  • u010229420
  • 2016年08月22日 16:00
  • 667

我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)

解决的问题: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这个其实和C++的拷贝构造函数的作用是一致的,实际上就是动态抽取当前对象运行时的状态。 类图结构:      ...
  • LCL_data
  • LCL_data
  • 2013年04月06日 16:01
  • 9238

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

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

设计模式-原型模式-prototype-python

原型模型
  • CCyutaotao
  • CCyutaotao
  • 2017年08月03日 16:44
  • 295

Spring中原型prototype的准确使用

Spring中原型prototype的准确使用实际问题项目中,报表导出涉及到了在同一个类的两个不同方法中,都有相同的查询数据库的操作,一个方法是用于获取内容,一个是用于获取条数的,大概类似于这样:@S...
  • unifirst
  • unifirst
  • 2016年01月08日 17:04
  • 10950

JavaScript prototype原型和原型链详解

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

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

用具体原型实例创建具体对象,并通过克隆该原型创建新对象原型和工厂的区别: - 工厂相当于创建新的原型类来获取新对象。 - 原型通过克隆已存在的原型类来获取新对象。抽象原型、具体原型using...
  • m0_37862405
  • m0_37862405
  • 2017年12月25日 18:46
  • 12

Java技术_每天掌握一种设计模式(006)_使用场景及简单实例(创建型:原型模式)

模式描述 用原型实例指定创建对象的种类,并且通过拷贝来创建新的对象。 2.模式作用 可以一定程度上解耦,消费者和对象的构造过程隔离开,对象如何构造与消费者完全无关。 可以一定程度提升效率,复杂对...
  • ooppookid
  • ooppookid
  • 2015年01月20日 10:14
  • 2182

原型模式(Prototype)

定义 原型模式有点像复制,不过该复制可以做一些修改,即从原对象复制出一个一模一样的对象后,然后可以选择性地修改复制后的对象,以此创建出一个需要的新对象。这里需要注意的是此处的复制指深拷贝,比较权威的定...
  • u014161864
  • u014161864
  • 2015年01月12日 15:15
  • 2150
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#设计模式之原型(ProtoType)
举报原因:
原因补充:

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