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 相关文章推荐
在php中取得image按钮传递的name值
Oct 09 PHP
基于mysql的论坛(4)
Oct 09 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php分页思路以及在ZF中的使用
May 30 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
解析htaccess伪静态的规则
Jun 18 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
PHP生成RSS文件类实例
Dec 05 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 #PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
You might like
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
php对象工厂类完整示例
2018/08/09 PHP
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
Bootstrap 网格系统布局详解
2017/03/19 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Python实现ping指定IP的示例
2018/06/04 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
学生自我评价范文
2014/02/02 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
有关环保的标语
2014/06/13 职场文书
2014年质检员工作总结
2014/11/18 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python