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 相关文章推荐
PHPMailer安装方法及简单实例
Nov 25 PHP
php csv操作类代码
Dec 14 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
memcache命令启动参数中文解释
Jan 13 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
PHP实现搜索相似图片
Sep 22 PHP
php获取图片信息的方法详解
Dec 10 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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 shell命令合并图片的代码
2011/06/23 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
万能的php分页类
2017/07/06 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python中apply函数的用法实例教程
2014/07/31 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
最新pycharm安装教程
2020/11/18 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
机械专业毕业生自荐信
2013/11/02 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
关于安全的演讲稿
2014/05/09 职场文书
银行求职自荐书
2014/06/25 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
公司放假通知范文
2015/04/14 职场文书
2015年端午节活动方案
2015/05/05 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
MySQL锁机制
2021/04/05 MySQL
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL