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 网上商城促销设计实例代码
Feb 17 PHP
用php来改写404错误页让你的页面更友好
Jan 24 PHP
php生成excel文件的简单方法
Feb 08 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
PHP中shuffle数组值随便排序函数用法
Nov 21 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
Mac下快速搭建PHP开发环境步骤详解
May 05 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 操作符与控制结构
2012/03/07 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
复制本贴标题和地址的js代码
2008/07/01 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
vue中过滤器filter的讲解
2019/01/21 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
python爬虫如何解决图片验证码
2021/02/14 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
数控专业个人求职信范文
2014/02/05 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
员工团队活动方案
2014/08/28 职场文书
社区助残日活动总结
2014/08/29 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
通讯稿范文
2015/07/22 职场文书
Golang 对es的操作实例
2022/04/20 Golang
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers