WEB开发网
开发学院软件开发C语言 无废话C#设计模式之五:Prototype 阅读

无废话C#设计模式之五:Prototype

 2009-04-02 08:21:28 来源:WEB开发网   
核心提示: 代码执行结果如下图:图片看不清楚?请点击这里查看原图(大图),代码说明l Enemy类是抽象原型,无废话C#设计模式之五:Prototype(2),它有两个用途,一是定义了原型的一些抽象内容,我们其实无需再做这些工作了,我们只需要得到它的完整数据,二是定义了原型模式必须的拷贝方法,在这里

代码执行结果如下图:

无废话C#设计模式之五:Prototype

图片看不清楚?请点击这里查看原图(大图)。

代码说明

l         Enemy类是抽象原型,它有两个用途,一是定义了原型的一些抽象内容,二是定义了原型模式必须的拷贝方法。在这里,我们看到,每个敌人的属性有位置、攻击力、速度等,并且能通过ShowInfo()方法来获取这个人的信息。

l         FootMan类就是具体原型了,它显示了敌人的具体参数以及实现了克隆自身。

l         GameScene类就是调用方,在这里我们并没有看到有和具体原因进行依赖,通过复制传入的克隆原型,得到一些新的敌人,在原型的基础上稍微调整一下就变成了一支敌人部队。

l         原型模式通过对原型进行克隆来替代无数子类,因此也就减少了调用方和具体类型产生依赖的程序。

l         Clone()方法接受一个参数,表示是否是深拷贝。在这里,我们通过序列化反序列化实现深拷贝,深拷贝实现对象的完整复制,包括对象内部的引用类型都会复制一份全新的。在这里,如果3个敌人对象的Location都指向内存同一个地址的话,那么它们就分不开了,因此,在复制的时候需要进行深拷贝,使得它们的Location是独立的。

l         在初始化Enemy的时候,我们Sleep()了一下,目的是模拟对象的创建是一个非常耗时的工作,这也体现了原型模式的另一个优势,在生成敌人的时候,我们其实无需再做这些工作了,我们只需要得到它的完整数据,并且进行一些修改就是一个新的敌人。

上一页  1 2 3 4  下一页

Tags:废话 设计模式 Prototype

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接