|
| |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
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环境下有关打印页面设置、打印机设置、打印预览对话框的实现(二) |
| 快精灵印艺坊 版权所有 |
首页 |
||