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类
Jul 15 PHP
PHP读MYSQL中文乱码的解决方法
Dec 17 PHP
分享PHP入门的学习方法
Jan 02 PHP
php学习之流程控制实现代码
Jun 09 PHP
php中的strpos使用示例
Feb 27 PHP
php计算整个目录大小的方法
Jun 19 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 PHP
yii2 在控制器中验证请求参数的使用方法
Jun 19 PHP
PHP创建XML接口示例
Jul 04 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
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
JS验证不重复验证码
2017/02/10 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
python从入门到精通(DAY 2)
2015/12/20 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
Python绘制组合图的示例
2020/09/18 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
Python的logging模块基本用法
2020/12/24 Python
经济信息管理专业大学生求职信
2013/09/27 职场文书
高中生活自我鉴定
2014/01/18 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
优秀求职信
2014/05/29 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
财务统计员岗位职责
2015/04/14 职场文书
感动中国何玥观后感
2015/06/02 职场文书
Python绘制散乱的点构成的图的方法
2022/04/21 Python