php設計模式之策略模式例項分析【星際爭霸遊戲案例】
阿新 • • 發佈:2020-03-27
本文例項講述了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陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》
希望本文所述對大家PHP程式設計有所幫助。