中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在php中應用狀態模式

發布時間:2021-06-07 17:42:27 來源:億速云 閱讀:135 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關怎么在php中應用狀態模式,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

待解決的問題:封裝坦克的狀態,讓狀態自己去控制行為。

思路:把狀態作為屬性,兵種類本身只控制狀態的變化,具體的行為由狀態類定義。

狀態(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中應用狀態模式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

陕西省| 佛山市| 亳州市| 英山县| 铜川市| 华安县| 石景山区| 台湾省| 蓝山县| 赤峰市| 绥中县| 离岛区| 赣榆县| 永川市| 乌鲁木齐县| 都江堰市| 大宁县| 泰宁县| 社旗县| 长武县| 黄陵县| 名山县| 香格里拉县| 汉沽区| 陵川县| 平泉县| 碌曲县| 台江县| 定远县| 阳原县| 化州市| 建宁县| 中西区| 邹城市| 阿尔山市| 金塔县| 老河口市| 泊头市| 民县| 渭源县| 家居|