1. 程式人生 > 程式設計 >php設計模式之職責鏈模式例項分析【星際爭霸遊戲案例】

php設計模式之職責鏈模式例項分析【星際爭霸遊戲案例】

本文例項講述了php設計模式之職責鏈模式。分享給大家供大家參考,具體如下:

星際的兵種屬性隨著對平衡性的調節,會進行修改。如果這樣的話,我們就要考慮減少一個事件和具體處理的關聯性。

比如一顆原子彈投下的瞬間,在殺傷範圍內的部隊或者建築都會減少血,但是隨著距離中心點的遠近,受損程度是不同的,而且不同的兵種和建築受損情況是不同的。

待解決的問題:原子彈投下的瞬間,將殺傷的處理分別交給殺傷範圍內的部隊或者建築自己的方法處理。

思路:建立一個介面,讓所有的部隊或者建築實現。

職責鏈模式(Chain of Responsibility)示例:

<?php
  //被原子彈攻擊的介面
  interface NuclearAttacked 
  {
    //處理被原子彈攻擊的方法,引數為投放點的x和y座標
    public function NuclearAttacked($x,$y);
  }

  //人族的基地,實現被原子彈攻擊的介面,其他的內容暫時不考慮
  class CommandCenter implements NuclearAttacked 
  {
    //處理被原子彈攻擊的方法,引數為投放點的x和y座標
    public function NuclearAttacked($x,$y)
    {
      //根據離原子彈中心的距離,定義減少的血,如果超出了剩餘的血,就炸掉
    }
  }

  //巡洋艦(俗稱大和),實現被原子彈攻擊的介面,其他的內容暫時不考慮
  class Battlecruiser implements NuclearAttacked 
  {
    //處理被原子彈攻擊的方法,引數為投放點的x和y座標
    public function NuclearAttacked($x,$y)
    {
      //根據離原子彈中心的距離,定義減少的血,如果超出了剩餘的血,就炸掉
    }
  }

  //原子彈類
  class Nuclear 
  {
    //被原子彈攻擊的物件
    public $attackedThings;

    //新增被原子彈攻擊的物件
    public function addAttackedThings($thing)
    {
      //新增被原子彈攻擊的物件
      $this->attackedThings[] = $thing;
    }

    //原子彈爆炸的方法,引數為投放點的x和y座標
    public function blast($x,$y)
    {
      //把爆炸的事情交給所有涉及的物件,讓他們自己處理
      foreach ($this->attackedThings as $thing)
      {
        //把爆炸的事情交給所有涉及的物件,讓他們自己處理
        $thing->NuclearAttacked($x,$y);
      }
    }
  }

  //新建一個基地物件
  $CommandCenter = new CommandCenter();

  //新建一個巡洋艦物件
  $Battlecruiser = new Battlecruiser();

  //造了一顆原子彈
  $Nuclear2 = new Nuclear();

  //假設投放成功,那個瞬間一個基地物件和一個巡洋艦物件在殺傷範圍內
  $Nuclear2->addAttackedThings($CommandCenter);
  $Nuclear2->addAttackedThings($Battlecruiser);

  //原子彈爆炸,這樣就把這個事件交給那些涉及的物件的處理方法,假設投放點的x和y座標是2353,368
  $Nuclear2->blast(2353,368);
?>

用途總結:職責鏈模式可以將一個涉及到多個物件的事件的處理交給物件自己處理,減少關聯性。

實現總結:需要一個處理事件的介面,然後讓所有的物件實現。

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。