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+MySQL5.0中文乱码解决方法
Nov 20 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
php验证session无效的解决方法
Nov 04 PHP
php模拟post提交数据的方法
Feb 12 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
CI框架网页缓存简单用法分析
Dec 26 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
Oct 23 PHP
PHP如何开启Opcache功能提升程序处理效率
Apr 27 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
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
js 提交和设置表单的值
2008/12/19 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
js回调函数仿360开机
2019/12/26 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
详谈python http长连接客户端
2017/06/12 Python
Python使用wxPython实现计算器
2018/01/30 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
Opencv求取连通区域重心实例
2020/06/04 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
中专生职业生涯规划书范文
2014/01/10 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
完整版商业计划书
2014/09/15 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫