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 的 __FILE__ 常量
Jan 15 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
PHP 数组教程 定义数组
Oct 23 PHP
php 验证码实例代码
Jun 01 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
php自定义加密与解密程序实例
Dec 31 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 14 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的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
python实现进程间通信简单实例
2014/07/23 Python
python实现中文转换url编码的方法
2016/06/14 Python
python实现人脸识别代码
2017/11/08 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
彻底解决Python包下载慢问题
2020/11/15 Python
Python函数调用追踪实现代码
2020/11/27 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
python中random模块详解
2021/03/01 Python
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
文员个人求职自荐信
2013/09/21 职场文书
销售员岗位职责范本
2014/02/03 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
领导干部作风建设总结
2014/10/23 职场文书
中小学生安全教育观后感
2015/06/17 职场文书