欢迎来到天天文库
浏览记录
ID:40313364
大小:44.02 KB
页数:4页
时间:2019-07-30
《设计模式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
此文档下载收益归作者所有