php设计模式之策略模式实例分析【星际争霸游戏案例】


Posted in PHP onMarch 26, 2020

本文实例讲述了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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP合并数组+号和array_merge的区别
Jun 25 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
iOS10推送通知开发教程
Sep 19 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 25 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
You might like
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
Python中的 enum 模块源码详析
2019/01/09 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Python Lambda函数使用总结详解
2019/12/11 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
openCV提取图像中的矩形区域
2020/07/21 Python
如何利用python生成MD5并去重
2020/12/07 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
安全员岗位职责
2013/11/11 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
英语演讲稿范文
2014/01/03 职场文书
数控专业自荐书范文
2014/03/16 职场文书
三年级学生评语大全
2014/12/26 职场文书
给上级领导的感谢信
2015/01/22 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
小学教育见习总结
2015/06/23 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL