設計模式之命令模式 php實現命令模式

2021-10-05 22:04:11 字數 1793 閱讀 7218

命令模式就是把命令封裝成物件。

將乙個請求封裝為物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄日誌,以及支援可撤銷的操作。

命令模式有哪些好處呢?

命令模式把請求乙個操作的物件和直到怎麼執行乙個操作的物件分隔開。

比如服務員把操作的請求者客戶和操作的執行者廚師分離開,把客戶的命令傳遞給廚師。

比如自如管家把操作的請求者租戶和操作的執行者房東分離開,把租戶的需求傳遞給房東。

當然這個比喻不太準確,哈哈哈,自如更像中介模式把所有的房東和租戶分離開。

我們先找到乙個房東,房東類可以修電視,修洗衣機

/**

* 命令模式

* 房東類,提供修洗衣機修電視服務

*/class

receiver

/** * 修洗衣機

*/public

function

wash()

}

有了房東我們接下來找乙個自如管家,讓管家聯絡房東。

/**

* 命令模式

* 自如管家,負責接收命令傳遞給房東

*/class

invoke

/** * 撤銷命令

*/public

function

cancel

(command $command)}

}/**

* 執行命令

*/public

function

exec()

}}

我們現在可以像管家下命令了,哎,沒有命令類啊,那我們現在增加命令。

/**

* 命令模式

* 命令抽象類,所有具體命令繼承這個類

*/abstract

class

command

public

abstract

function

exec()

;}/** * 命令模式

* 修電視命令

*/class

tvextends

command

}/**

* 命令模式

* 修洗衣機命令

*/class

wash

extends

command

}

好了,有了命令,我們可以給管家下命令了。

$invoke

=new

invoke()

;//租戶告訴管家找房東修電視

$invoke

->

setcommand

(newtv(

newreceiver))

;//租戶告訴管家找房東修洗衣機

$invoke

->

setcommand

(new

wash

(new

receiver))

;//管家找房東去了

$invoke

->

exec()

;

這就是命令模式,不過在程式中,我還沒想好有啥場景使用這個模式。。。

**放在了我的github上面。

PHP設計模式之命令模式

將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。用於 行為請求者 與 行為實現者 解耦,可實現二者之間的松耦合,以便適應變化。如下 header content type text html charset uft 8 命令模式 inte ce validator 命令介面 ...

PHP設計模式之命令模式

命令模式,也稱為動作或者事務模式,很多教材會用飯館來舉例。作為顧客的我們是命令的下達者,服務員是這個命令的接收者,選單是這個實際的命令,而廚師是這個命令的執行者。那麼,這個模式解決了什麼呢?當你要修改選單的時候,只需要和服務員說就好了,她會轉達給廚師,也就是說,我們實現了顧客和廚師的解耦。也就是呼叫...

php設計模式之命令鏈模式

1.命令連模式可以使用在使用者登陸註冊的時候處理不同角色使用者的業務邏輯,與變數值 command inte ce inte ce mycommand user register class register public function runcommand name,args common l...