无废话C#设计模式之五:Prototype
2009-04-02 08:21:28 来源:WEB开发网核心提示: 代码执行结果如下图:图片看不清楚?请点击这里查看原图(大图),代码说明l Enemy类是抽象原型,无废话C#设计模式之五:Prototype(2),它有两个用途,一是定义了原型的一些抽象内容,我们其实无需再做这些工作了,我们只需要得到它的完整数据,二是定义了原型模式必须的拷贝方法,在这里
代码执行结果如下图:
图片看不清楚?请点击这里查看原图(大图)。
代码说明
l Enemy类是抽象原型,它有两个用途,一是定义了原型的一些抽象内容,二是定义了原型模式必须的拷贝方法。在这里,我们看到,每个敌人的属性有位置、攻击力、速度等,并且能通过ShowInfo()方法来获取这个人的信息。
l FootMan类就是具体原型了,它显示了敌人的具体参数以及实现了克隆自身。
l GameScene类就是调用方,在这里我们并没有看到有和具体原因进行依赖,通过复制传入的克隆原型,得到一些新的敌人,在原型的基础上稍微调整一下就变成了一支敌人部队。
l 原型模式通过对原型进行克隆来替代无数子类,因此也就减少了调用方和具体类型产生依赖的程序。
l Clone()方法接受一个参数,表示是否是深拷贝。在这里,我们通过序列化反序列化实现深拷贝,深拷贝实现对象的完整复制,包括对象内部的引用类型都会复制一份全新的。在这里,如果3个敌人对象的Location都指向内存同一个地址的话,那么它们就分不开了,因此,在复制的时候需要进行深拷贝,使得它们的Location是独立的。
l 在初始化Enemy的时候,我们Sleep()了一下,目的是模拟对象的创建是一个非常耗时的工作,这也体现了原型模式的另一个优势,在生成敌人的时候,我们其实无需再做这些工作了,我们只需要得到它的完整数据,并且进行一些修改就是一个新的敌人。
更多精彩
赞助商链接