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 相关文章推荐
建立动态的WML站点(一)
Oct 09 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
php生成随机密码的几种方法
Jan 17 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
php构造函数实例讲解
Nov 13 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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基础知识:类与对象(5) static
2006/12/13 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
PHP中SESSION过期设置
2021/03/09 PHP
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
python对常见数据类型的遍历解析
2019/08/27 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
Python单链表原理与实现方法详解
2020/02/22 Python
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
民间借贷协议书范本
2014/10/01 职场文书
导游词范文
2015/02/13 职场文书
郭明义观后感
2015/06/08 职场文书
欢迎新生标语2015
2015/07/16 职场文书
大学班长竞选稿
2015/11/20 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
mysql查看表结构的三种方法总结
2022/07/07 MySQL