十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了怎么在php中应用策略模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联是专业的田阳网站建设公司,田阳接单;提供成都网站设计、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行田阳网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!待解决的问题:我们需要根据种族的不同,而对玩家进行不同的初始化,好将这些不同的处理方式封装。
思路:定义初始化的接口,然后制作不同种族的初始化类。
策略模式(Strategy)示例:
为了使代码不至于过长,一部分类的定义不在此写出,如果要调试,请用字符串等方式替代new。
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中应用策略模式,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。