• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php设计模式之状态模式实例分析【星际争霸游戏案例】

    本文实例讲述了php设计模式之状态模式。分享给大家供大家参考,具体如下:

    星际的一些兵种会有不止一种状态,比如坦克可以架起来,机枪兵可以打兴奋剂,甚至还有一些被动的,比如被虫族女王喷洒绿色液体后,敌人的行动变慢。

    如果按照一般的思路,每次我们对一个小兵进行操作的时候,比如一辆坦克,我们都要用if判断他的状态,这样代码中会有很多的if,else或者swith。

    不过我们可以发现,我们需要的是他在某个状态下的行为,如果把这些行为按照状态封装起来,就可以减少大量的判断。

    待解决的问题:封装坦克的状态,让状态自己去控制行为。

    思路:把状态作为属性,兵种类本身只控制状态的变化,具体的行为由状态类定义。

    状态(State)模式示例:

    ?php
      //坦克状态的接口
      interface TankState
      {
        //坦克的攻击方法
        public function attack();
      }
    
      //坦克普通状态
      class TankState_Tank implements TankState
      {
        //坦克的攻击方法
        public function attack()
        {
          //这里简单的输出当前状态
          echo "普通状态";
        }
      }
    
      //坦克架起来的状态
      class TankState_Siege implements TankState
      {
        //坦克的攻击方法
        public function attack()
        {
          //这里简单的输出当前状态
          echo "架起来了";
        }
      }
    
      //坦克类
      class Tank
      {
        //状态
        public $state;
    
        //坦克的攻击方法
        public function __construct()
        {
          //新造出来的坦克当然是普通状态
          $this->state = new TankState_Tank();
        }
    
        //设置状态的方法,假设参数为玩家点击的键盘
        public function setState($key)
        {
          //如果按了s
          if($key = 's')
          {
            $this->state = new TankState_Siege();
          }
          //如果按了t
          elseif($key = 't')
          {
            $this->state = new TankState_Tank();
          }
        }
    
        //坦克的攻击方法
        public function attack()
        {
          //由当前状态自己来处理攻击
          $this->state->attack();
        }
      }
    
      //新造一辆坦克
      $tank = new Tank();
    
      //假设正好有个敌人路过,坦克就以普通模式攻击了
      $tank->attack();
    
      //架起坦克
      $tank->setState('s');
    
      //坦克再次攻击,这次是架起模式
      $tank->attack();
    ?>
    
    

    用途总结:状态模式可以将和状态相关的行为和属性封装,除了切换状态时,其它地方就不需要大量的判断当前状态,只要调用当前状态的方法等。

    实现总结:用一个接口规范状态类需要实现的方法,比如上面的TankState规定了attack()。把各个状态封装成类,将不同状态下的不同方法放入各自的状态类,比如上面的攻击方法,同时所有的状态执行接口。原来的事务类,比如上面的Tank类,只负责状态切换,一旦需要某一个方法的调用,只要交给当前状态就可以了。

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php设计模式 State (状态模式)
    • PHP设计模式之状态模式定义与用法详解
    • 学习php设计模式 php实现状态模式
    • PHP设计模式之观察者模式(Observer)详细介绍和代码实例
    • PHP常用的三种设计模式汇总
    • PHP经典面试题之设计模式(经常遇到)
    • php设计模式小结
    • php 设计模式之 工厂模式
    • php基础设计模式大全(注册树模式、工厂模式、单列模式)
    • PHP设计模式入门之状态模式原理与实现方法分析
    上一篇:php设计模式之正面模式实例分析【星际争霸游戏案例】
    下一篇:php设计模式之策略模式实例分析【星际争霸游戏案例】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php设计模式之状态模式实例分析【星际争霸游戏案例】 php,设计模式,之,状态,模式,