这篇文章主要介绍了php设计模式之策略模式,结合星际争霸游戏案例形式分析了php策略模式相关原理、用法及操作注意事项,需要的朋友可以参考下本文实例讲述了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);?>
相关推荐
© 2020 asciim码
人生就是一场修行