您好,登錄后才能下訂單哦!
怎么在php中應(yīng)用職責(zé)鏈模式?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
待解決的問題:原子彈投下的瞬間,將殺傷的處理分別交給殺傷范圍內(nèi)的部隊或者建筑自己的方法處理。
思路:建立一個接口,讓所有的部隊或者建筑實現(xiàn)。
職責(zé)鏈模式(Chain of Responsibility)示例:
<?php //被原子彈攻擊的接口 interface NuclearAttacked { //處理被原子彈攻擊的方法,參數(shù)為投放點的x和y坐標(biāo) public function NuclearAttacked($x, $y); } //人族的基地,實現(xiàn)被原子彈攻擊的接口,其他的內(nèi)容暫時不考慮 class CommandCenter implements NuclearAttacked { //處理被原子彈攻擊的方法,參數(shù)為投放點的x和y坐標(biāo) public function NuclearAttacked($x, $y) { //根據(jù)離原子彈中心的距離,定義減少的血,如果超出了剩余的血,就炸掉 } } //巡洋艦(俗稱大和),實現(xiàn)被原子彈攻擊的接口,其他的內(nèi)容暫時不考慮 class Battlecruiser implements NuclearAttacked { //處理被原子彈攻擊的方法,參數(shù)為投放點的x和y坐標(biāo) public function NuclearAttacked($x, $y) { //根據(jù)離原子彈中心的距離,定義減少的血,如果超出了剩余的血,就炸掉 } } //原子彈類 class Nuclear { //被原子彈攻擊的對象 public $attackedThings; //添加被原子彈攻擊的對象 public function addAttackedThings($thing) { //添加被原子彈攻擊的對象 $this->attackedThings[] = $thing; } //原子彈爆炸的方法,參數(shù)為投放點的x和y坐標(biāo) public function blast($x, $y) { //把爆炸的事情交給所有涉及的對象,讓他們自己處理 foreach ($this->attackedThings as $thing) { //把爆炸的事情交給所有涉及的對象,讓他們自己處理 $thing->NuclearAttacked($x, $y); } } } //新建一個基地對象 $CommandCenter = new CommandCenter(); //新建一個巡洋艦對象 $Battlecruiser = new Battlecruiser(); //造了一顆原子彈 $Nuclear2 = new Nuclear(); //假設(shè)投放成功,那個瞬間一個基地對象和一個巡洋艦對象在殺傷范圍內(nèi) $Nuclear2->addAttackedThings($CommandCenter); $Nuclear2->addAttackedThings($Battlecruiser); //原子彈爆炸,這樣就把這個事件交給那些涉及的對象的處理方法,假設(shè)投放點的x和y坐標(biāo)是2353, 368 $Nuclear2->blast(2353, 368); ?>
用途總結(jié):職責(zé)鏈模式可以將一個涉及到多個對象的事件的處理交給對象自己處理,減少關(guān)聯(lián)性。
實現(xiàn)總結(jié):需要一個處理事件的接口,然后讓所有的對象實現(xiàn)。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。