快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Prototype设计模式的实现

Prototype设计模式的实现

Implementing the Prototype design Pattern



下载本文代码

当我建立一个类的实例很复杂时,我们可以使用Prototype模式。与其建立很多类的实例,还不如进行适当的修改后,使用最初的实例的副本。使用Prototype模式,可以通过克隆一个原型,减少子类的数量。Prototype模式可以减少类的实例的数量。

在这个模式中,通过克隆来创建对象。我们有时创建很多的子类,除了通过很多的子类来创建不同的对象,我们还可以只需要唯一的一个子类,这个子类保持对每个对象基类的引用,并通过这个子类创建对象。通过向子类的构造函数传递参数并克隆对象。每个对象都实现clone方式,所以可以被克隆。我们可以使用Prototype模式,通过克隆原型来减少子类的数量。

克隆可以通过实现Icloneable接口来实现。Icloneable接口中唯一的方式是Clone,并返回一个新的类的实例。

ICloneable.Clone method signature
[VisualBasic] Function Clone() As Object
[C#] object Clone();




我们必须了解Clone()方式只是一种浅表复制(Shallow copy),而不是深层复制(Deep copy)。所以它只是返回一个引用,而不象深层复制(Deep copy)那样创建一个复制的实例。我们可以通过使用Iserializable接口来实现深层复制(Deep copy)。

另一个缺点就是原型的每个子类必须实现Clone()方式,有时候,增加clone方式是很困难的。

在这个例子中,我建立了EmpData类,并且实现了Icloneable接口和Iserializable接口。Icloneable接口需要实现Clone方式,使得类可以被复制。Iserializable接口为了实现对EmpData类的深层复制(Deep copy)。使用的方式为:将EmpData对象序列化为一个文件,也可以将这个文件反序列化为一个EmpData对象。

EmpData类包含两个方式:GetEmpData和ChangeEmpData。这两个方式被用来以一个字符串(string)的形式获取EmpData对象、更改EmpData类。每个方式都可以被调用,来检验浅表复制(Shallow copy)和深层复制(Deep copy)的不同。浅表复制(Shallow copy)时,假如EmpData类改变时,这个变化也会同时出现在EmpData的克隆对象中;而在深层复制(Deep copy),假如EmpData对象发生改变时,这个变化不会出现在EmpData的克隆对象中。

EmpData类的构造函数读取XML文件并创建Emp对象。






返回类别: 教程
上一教程: Visual Studio.NET版本比较(中文版)
下一教程: 如何在C#的WinForm中制作饼状图和柱状图

您可以阅读与"Prototype设计模式的实现"相关的教程:
· ASP.NET下MVC设计模式的实现
· 一次重构导向设计模式的实践(.NET)
· .NET中的设计模式二:单件模式
· .NET中的设计模式五:观察者模式
· NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现(二)
    微笑服务 优质保证 索取样品