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 curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 PHP
Destoon实现多表查询示例
Aug 21 PHP
WordPress网站性能优化指南
Nov 18 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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
全国FM电台频率大全 - 27 陕西省
2020/03/11 无线电
?繁体转换的class
2006/10/09 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
总结一些js自定义的函数
2006/08/05 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
python将音频进行变速的操作方法
2020/04/08 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
工程师岗位职责规定
2014/02/26 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
民事和解协议书格式
2014/11/29 职场文书
刑事起诉书范文
2015/05/19 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
MySQL 覆盖索引的优点
2021/05/19 MySQL
Python学习之时间包使用教程详解
2022/03/21 Python