设计模式5Prototype

设计模式5Prototype

ID:40313364

大小:44.02 KB

页数:4页

时间:2019-07-30

设计模式5Prototype_第1页
设计模式5Prototype_第2页
设计模式5Prototype_第3页
设计模式5Prototype_第4页
资源描述:

《设计模式5Prototype》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、无废话C#设计模式之五:Prototype意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。场景游戏场景中的有很多相似的敌人,它们的技能都一样,但是随着敌人出现的位置不同,这些人的能力不太一样。假设,我们现在需要把三个步兵组成一队,其中还有一个精英步兵,能力特别高。那么,你或许可以创建一个敌人抽象类,然后对于不同能力的步兵创建不同的子类。然后,使用工厂方法等设计模式让调用方依赖敌人抽象类。问题来了,如果有无数种能力不同步兵,难道需要创建无数子类吗?还有,步兵模型的初始化工作是非常耗时的,创建这么多步兵对象可能还

2、会浪费很多时间。我们是不是可以通过只创建一个步兵原型,然后复制出多个一摸一样的步兵呢?复制后,只需要调整一下这些对象在地图上出现的位置,或者调整一下它们的能力即可。原型模式就是用来解决这个问题的。示例代码usingSystem;usingSystem.Threading;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.Diagnostics;namespac

3、ePrototypeExample{classProgram{staticvoidMain(string[]args){Stopwatchsw=newStopwatch();sw.Start();EnemyenemyPrototype=newFootMan(5,4,newLocation(100,200));GameScenegs=newGameScene();ListenemyGroup=gs.CreateEnemyGroup(enemyPrototype);foreach(FootManftinenemyGro

4、up){ft.ShowInfo();ft.FootmanAttack();}Console.WriteLine(sw.ElapsedMilliseconds);}}classGameScene{publicListCreateEnemyGroup(EnemyenemyPrototype){ListenemyGroup=newList();Enemye1=enemyPrototype.Clone(true);e1.Location.x=enemyPrototype.Location.x-1

5、0;Enemye2=enemyPrototype.Clone(true);e2.Location.x=enemyPrototype.Location.x+10;Enemyelite=enemyPrototype.Clone(true);elite.Power=enemyPrototype.Power*2;elite.Speed=enemyPrototype.Speed*2;elite.Location.x=enemyPrototype.Location.x;elite.Location.y=enemyPrototype.Loca

6、tion.y+10;enemyGroup.Add(e1);enemyGroup.Add(e2);enemyGroup.Add(elite);returnenemyGroup;}}[Serializable]classLocation{publicintx;publicinty;publicLocation(intx,inty){this.x=x;this.y=y;}}[Serializable]abstractclassEnemy{protectedLocationlocation;publicLocationLocation{

7、get{returnlocation;}set{location=value;}}protectedintpower;publicintPower{get{returnpower;}set{power=value;}}protectedintspeed;publicintSpeed{get{returnspeed;}set{speed=value;}}publicabstractEnemyClone(boolisDeepCopy);publicabstractvoidShowInfo();publicEnemy(intpower

8、,intspeed,Locationlocation){Thread.Sleep(1000);//Constructmethodisassumedtobeahighcalcwork.this.power=power;this.speed=speed;this.l

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。