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 相关文章推荐
我的论坛源代码(四)
Oct 09 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
php GUID生成函数和类
Mar 10 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
10款PHP开源商城系统汇总介绍
Jul 23 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
PHP钩子实现方法解析
May 21 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 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的中问验证码
2006/11/25 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
webpack打包js的方法
2018/03/12 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
微信小程序控制台提示warning:Now you can provide attr &quot;wx:key&quot; for a &quot;wx:for&quot; to improve performance解决方法
2019/02/21 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
Python Gitlab Api 使用方法
2019/08/28 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
基于Python实现简单学生管理系统
2020/07/24 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
古汉语文学求职信范文
2014/03/16 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
Python爬虫基础讲解之请求
2021/05/13 Python
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
SQL CASE 表达式的具体使用
2022/03/21 SQL Server