您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在php中應用策略模式,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
待解決的問題:我們需要根據種族的不同,而對玩家進行不同的初始化,最好將這些不同的處理方式封裝。
思路:定義初始化的接口,然后制作不同種族的初始化類。
策略模式(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中應用策略模式,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。