引言:
发表日期: 17/04/2002 18:51:10
发表人: Ashish Jaiman
发表人信箱: Ashish.Jaiman@lexign.com
发表人网址: http://www.lexign.com
与其不断地创建类实例,有时反不如使用原型克隆方法,拷贝已有...
摘要:
(松下客 2001年05月28日 12:02)
一、概述
web网站往往具有复杂与高度动态的特点。为了让web应用在短时间之内开始运作,开发周期应该尽量地短。许多时候,开发者直接进入编写代码这一阶段,却不去仔细考虑自己想要构造的是什么样的网站以及准备如何构造:服务器端代码往往是毫无准备的即兴式编写,数据库表也是随需随加,整个应用的体系有时候呈现一种无规划状态。然而,只要我们运......
摘要:
using system;
namespace testform
{
/// <summary>
/// event source
/// </summary>
public class bird
{
public bird()
{
}
public void flying()
{
this.onbirdevent(birdstatu......
C#和.NET中的原型克隆
发表日期: 17/04/2002 18:51:10
发表人: ashish jaiman
发表人信箱: ashish.jaiman@lexign.com
发表人网址: http://www.lexign.com
与其不断地创建类实例,有时反不如使用原型克隆方法,拷贝已有的实例,然后适当地作些改动.当使用的子类仅仅在对象类型上不同于父类,也可以用原型克隆方法来减少子类数量.
===========================================================
创建类的实例是相当花费时间而且比较复杂的事,与其不断地创建类实例,有时反不如使用原型克隆方法,拷贝已有的实例,然后适当地作些改动.当使用的子类仅仅在对象类型上不同于父类,也可以用原型克隆方法来减少子类数量.
原型设计模式的重点在于“用克隆的方式创建对象”.有时为了得到不同的对象类型而创建不同子类,这时用原型设计就只需要创建一个子类(在这个子类里有指向基类的引用),然后创建这个子类的对象.以后就只要创建这个子类的对象就能用了.每个对象都是能被克隆的,使用原型克隆将大大减少子类的数量.
用系统的icloneable命名可以实现克隆.icloneable的唯一成员就是clone方法,它将返回一个新的类实例,并包含与科隆对象同样的参数值.
icloneable.clone 方法的描述:
[visual basic] function clone() as object
[c#] object clone();
必需指出的是,clone()方法是一种“浅”拷贝,它只返回指向原型的引用.另外还有一种“深”拷贝,它拷贝整个实例对象.用iserializable接口可以实现对象的深拷贝.
克隆对象的任何变化都将影响到原型,反之亦然.克隆方法的另外一个不足之处在于它的子类都必需使用clone()方法,很难使用其他的拷贝方法.
在示范例子里(文末可以下载),我创建了一个empdata类,它有icloneable与iserializable二种接口.icloneable用于创建“浅”拷贝,iserializable用于创建“深”拷贝.前者仅拷贝对象的引用,后者则拷贝整个对象.empdata类有二个方法:getempdata与changeempdata.前者将源对象克隆成为一个字符串,后者则可以对其进行修改.
二种方法都可以被使用,并用于验证深浅克隆方法的不同.浅克隆对象的变化将影响到被克隆的原型对象,而深克隆对象的变化则不改变原型对象数据.
empdata的构造函数是挺花时间的,因为它要读取xml文件并创建对象....
下一页 摘要:
一个扑克游戏的诞生---扑克牌及相关类代码兼谈异常
呵呵,真得很高兴上篇帖子发了以后马上有一个叫ide的朋友对我画的uml图提出了批评,这是我最希望看到的,希望这位ide网友能够继续就这个问题继续指教我一下,呵呵。另外我还是想强调一下,写这篇文章并不是为了给大家做教程,而是希望大家看到我做这个游戏当中从设计到最后完成的设计思路及编程方法,而我做这个游戏也仅仅是为了学习一下.ne......