时间:2021-05-26
本文实例讲述了php设计模式之策略模式。分享给大家供大家参考,具体如下:
星际开地图对战,等5秒钟进入地图后,每个玩家都会拥有一个基地,几个农民等,还会有初始的人口供给。但这些是根据种族的不同而不同。
待解决的问题:我们需要根据种族的不同,而对玩家进行不同的初始化,最好将这些不同的处理方式封装。
思路:定义初始化的接口,然后制作不同种族的初始化类。
策略模式(Strategy)示例:
为了使代码不至于过长,一部分类的定义不在此写出,如果要调试,请用字符串等方式替代new。
<?php //玩家的类 class player { //所属种族 public $race; //部队 public $army; //建筑 public $building; //人口供给 public $supply; //构造函数,设定所属种族 public function __construct($race) { $this->race = $race; } } //初始化的接口 interface initialPlayer { //制造初始化的部队 public function giveArmy($player); //制造初始化的建筑 public function giveBuilding($player); //初始化人口供给 public function giveSupply($player); } //虫族的初始化算法 class zergInitial implements initialPlayer { //制造初始化的部队 public function giveArmy($player) { //一个Overlord $player->army[] = new Overlord(); //四个虫族农民 for($i=0; $i<4;$i++) { $player->army[] = new Drone(); } } //制造初始化的建筑 public function giveBuilding($player) { //一个基地 $player->building[] = new Hatchery(); } //初始化人口供给 public function giveSupply($player) { //虫族初始人口供给为9 $player->supply = 9; } } //人族的初始化算法 class terranInitial implements initialPlayer { //制造初始化的部队 public function giveArmy($player) { //四个人族农民 for($i=0; $i<4;$i++) { $player->army[] = new SVC(); } } //制造初始化的建筑 public function giveBuilding($player) { //一个基地 $player->building[] = new Hatchery(); } //初始化人口供给 public function giveSupply($player) { //人族初始人口供给为10 $player->supply = 10; } } //初始化的控制类 class initialController { //构造函数,参数为玩家的数组 public function __construct($playerArray) { foreach ($playerArray as $player) { switch ($player->race) { case 'zerg': $initialController = new zergInitial(); break; case 'terran': $initialController = new terranInitial(); break; } $initialController->giveArmy($player); $initialController->giveBuilding($player); $initialController->giveSupply($player); } } } //假设两个虫族,一个人族 $playerArray = array( new player('zerg'), new player('zerg'), new player('terran'), ); //进行初始化工作 $initialController = new initialController($playerArray);?>用途总结:策略模式可以将不同情况下的算法封装,根据具体的情况调用。
实现总结:需要一个接口,规定算法规范,使用者(比如初始化来)只要调用对应的算法就可以了。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了php设计模式之代理模式。分享给大家供大家参考,具体如下:星际争霸如果是多人对战模式,就会遇到一个问题:如何降低网络延时和负担。为了确保数据的一致
超强手工制作星际争霸玩具模型(组图)星际争霸玩具模型(一)一群心灵手巧的《星际争霸》爱好者手工制作的星际争霸精美玩具模型,大家一同来欣赏一下吧。具体请看个人怎么
本文实例讲述了php设计模式之备忘模式。分享给大家供大家参考,具体如下:我们在玩星际任务版或者单机与电脑对战的时候,有时候会突然要离开游戏,或者在出兵前面,需要
本文实例讲述了PHP设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下:策略模式(StrategyPattern)策略模式是对象的行为模式,用意是对一
本文实例讲述了php设计模式之组合模式。分享给大家供大家参考,具体如下:星际里面我们可以下载别人制作的地图,或者自己做地图玩。我们在选择玩哪张地图的时候,可以看