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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
Ajax PHP分页演示
Jan 02 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 PHP
php获取淘宝分类id示例
Jan 16 PHP
php伪静态之APACHE篇
Jun 02 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
PHP echo()函数讲解
Feb 15 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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 GeoIP的使用教程
2011/03/09 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
python简单文本处理的方法
2015/07/10 Python
python实现简单socket通信的方法
2016/04/19 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
python 模拟登陆github的示例
2020/12/04 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
自我鉴定思想方面
2013/10/07 职场文书
自我鉴定200字
2013/10/28 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
会计求职自荐信
2014/06/20 职场文书
人事聘任通知
2015/04/21 职场文书
幼儿园见习总结
2015/06/23 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏