摘要:命令模式概念將請(qǐng)求封裝成對(duì)象,以便使用不同的請(qǐng)求隊(duì)列或者日志來(lái)參數(shù)化其他對(duì)象。命令模式也支持可撤銷(xiāo)的操作。從而實(shí)現(xiàn)行為請(qǐng)求者與行為實(shí)現(xiàn)者的松耦合。
命令模式概念
將請(qǐng)求封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來(lái)參數(shù)化其他對(duì)象。命令模式也支持可撤銷(xiāo)的操作。
從而實(shí)現(xiàn)“行為請(qǐng)求者”與“行為實(shí)現(xiàn)者”的松耦合。
抽象命令(Command):定義命令的接口,聲明執(zhí)行的方法(execute、undo)
具體命令(ConcreteCommand):命令接口實(shí)現(xiàn)對(duì)象,通常會(huì)持有接收者,并調(diào)用接收者的功能來(lái)完成命令要執(zhí)行的操作
接收者(Receiver):執(zhí)行命令的對(duì)象
請(qǐng)求者(Invoker):調(diào)用命令對(duì)象執(zhí)行請(qǐng)求
light = $light; } public function execute() { $this->light->on(); } public function undo() { $this->light->off(); } } /** * 具體命令(ConcreteCommand) * Class LightOff */ class LightOff implements Command{ private $light; public function __construct(Light $light) { $this->light = $light; } public function execute() { $this->light->off(); } public function undo() { $this->light->on(); } } /** * 請(qǐng)求者(Invoker) * Class Control */ class Control{ protected $object; public function __construct($object) { $this->object = $object; } public function exec(){ $this->object->execute(); } public function undo(){ $this->object->undo(); } } $light = new Light(); $light_on = new LightOn($light); $control = new Control($light_on); $control->exec(); echo "設(shè)計(jì)原則
"; $control->undo();
1.封裝變化
2.多用組合,少用繼承
3.針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程
4.為交互對(duì)象之間松耦合設(shè)計(jì)而努力
5.類(lèi)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉
6.依賴(lài)抽象、不要依賴(lài)具體類(lèi)
1.命令模式將發(fā)出請(qǐng)求的對(duì)象和執(zhí)行請(qǐng)求的對(duì)象解耦
2.在被解耦的兩者之間通過(guò)命令對(duì)象進(jìn)行溝通。命令對(duì)象封裝了接收者和一個(gè)或一組動(dòng)作
3.調(diào)用者通過(guò)調(diào)用命令對(duì)象的execute方法發(fā)出請(qǐng)求,這樣使得接受者的動(dòng)作被調(diào)用
4.調(diào)用者可以接受命令當(dāng)做參數(shù),甚至在運(yùn)行時(shí)動(dòng)態(tài)的進(jìn)行
5.命令可以支持撤銷(xiāo),做法實(shí)現(xiàn)一個(gè)undo的方法來(lái)回到execute被執(zhí)行前的狀態(tài)
6.命令也可以用來(lái)實(shí)現(xiàn)日志、事物系統(tǒng)、隊(duì)列
參考文獻(xiàn)《head first設(shè)計(jì)模式》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22559.html
摘要:的設(shè)計(jì)模式有很多種,本文取最簡(jiǎn)單的三種模式工廠(chǎng)模式單例模式和注冊(cè)樹(shù)模式進(jìn)行簡(jiǎn)單的講解。文件創(chuàng)建完后,咱們回到單元測(cè)試文件文件再執(zhí)行一下單元測(cè)試命令發(fā)現(xiàn),也能返回成功,這樣的話(huà)我們就能很方便的修改任何驅(qū)動(dòng)了。 php 設(shè)計(jì)模式之工廠(chǎng)模式、單例模式、注冊(cè)樹(shù)模式 在軟件工程中,創(chuàng)建型設(shè)計(jì)模式承擔(dān)著對(duì)象創(chuàng)建的職責(zé),嘗試創(chuàng)建適合程序上下文的對(duì)象,對(duì)象創(chuàng)建設(shè)計(jì)模式的產(chǎn)生是由于軟件工程設(shè)計(jì)的問(wèn)題,具...
摘要:概念將來(lái)自客戶(hù)端的請(qǐng)求傳入一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶(hù)進(jìn)行參數(shù)化。用于行為請(qǐng)求者與行為實(shí)現(xiàn)者解耦,可實(shí)現(xiàn)二者之間的松耦合,以便適應(yīng)變化。角色命令在一個(gè)方法調(diào)用之上定義一個(gè)抽象具體的命令一個(gè)操作的實(shí)現(xiàn)調(diào)用者引用實(shí)例作為它可用的操作。 概念 將來(lái)自客戶(hù)端的請(qǐng)求傳入一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶(hù)進(jìn)行參數(shù)化。用于行為請(qǐng)求者與行為實(shí)現(xiàn)者解耦,可實(shí)現(xiàn)二者之間的松耦合,以便適應(yīng)變化...
摘要:命令行時(shí)返回值為,標(biāo)準(zhǔn)輸入輸出均指向終端可用進(jìn)程號(hào)查看。會(huì)在腳本執(zhí)行完畢后關(guān)閉三個(gè)流,無(wú)需用戶(hù)手動(dòng)關(guān)閉。與遠(yuǎn)程網(wǎng)址交互是一個(gè)請(qǐng)求和響應(yīng)的過(guò)程,其中細(xì)節(jié)可參考本人之前的文章回顧之請(qǐng)求和回顧之響應(yīng),也可參考協(xié)議的權(quán)威文檔。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) ses...
摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶(hù)希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類(lèi) Collections 中大概有兩類(lèi)功能,第一類(lèi)是對(duì)容器接口對(duì)象進(jìn)行操作,第二類(lèi)是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類(lèi)的接口轉(zhuǎn)換成客戶(hù)希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類(lèi) Collections 中大概有兩類(lèi)功能,第一類(lèi)是對(duì)容器接口對(duì)象進(jìn)行操作,第二類(lèi)是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
閱讀 2193·2021-11-19 09:55
閱讀 2657·2021-11-11 16:55
閱讀 3187·2021-09-28 09:36
閱讀 1955·2021-09-22 16:05
閱讀 3290·2019-08-30 15:53
閱讀 1815·2019-08-30 15:44
閱讀 2907·2019-08-29 13:10
閱讀 1351·2019-08-29 12:30