PHP設計模式 命令模式

2021-09-23 00:15:41 字數 2791 閱讀 7905

宣告:本系列部落格參考資料《大話設計模式》,作者程杰。

命令模式:

在軟體系統中,「行為請求者」與「行為實現者」通常呈現一種「緊耦合」。但在某些場合,比如要對行為進行「記錄、撤銷

/重做、事務」等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將「行為請求者」與「行為實現者」解耦?將一組行為抽象為物件,實現二者之間的松耦合。這就是命令模式。

類圖:

角色分析:

抽象命令:定義

命令的介面,宣告執行的方法。

具體命令:命令

介面實現物件,是「虛」的實現;

通常會持有接收者,並呼叫接收者的功能來完成命令要執行的操作。

命令接收者

:接收者

,真正執行命令的物件。任何類都可能成為乙個接收者,只要它能夠實現命令要求實現的相應功能。

控制者:要求

命令物件執行請求,通常會持有命令物件,可以持有很多的命令物件。這個是客戶端真正觸發命令並要求命令執行相應操作的地方,也就是說相當於使用命令物件的入口。

核心**:

<?php 

/** * created by phpstorm.

* user: lyl

* date: 2015/6/4

* time: 20:21

*//**

* 電視機是請求的接收者,

*遙控器上有一些按鈕,不同的按鈕對應電視機的不同操作。

*抽象命令角色由乙個命令介面來扮演,有三個具體的命令類實現了抽象命令介面,

*這三個具體命令類分別代表三種操作:開啟電視機、關閉電視機和切換頻道。

*顯然,電視機遙控器就是乙個典型的命令模式應用例項。

*//**命令接收者

* class tv

*/class tv

/*** 關閉電視機

*/public function turnoff()

/**切換頻道

* @param $channel 頻道

*/public function turnchannel($channel)

}/**執行命令介面

* inte***ce icommand

*/inte***ce icommand

/**開機命令

* class commandon

*/class commandon implements icommand

public function execute()

}/**關機命令

* class commandon

*/class commandoff implements icommand

public function execute()

}/**切換頻道命令

* class commandon

*/class commandchannel implements icommand

public function execute()

}/**遙控器

* class control

*/class control

public function turnon()

public function turnoff()

public function changechannel()

}

呼叫客戶端**:

header("content-type:text/html;charset=utf-8");

//----------------------命令模式--------------------

require_once "./command/command.php";

//測試**

// 命令接收者  

$mytv = new tv();

// 開機命令  

$on = new commandon($mytv);

// 關機命令  

$off = new commandoff($mytv);

// 頻道切換命令  

$channel = new commandchannel($mytv, 2);

// 命令控制物件 

$control = new control($on, $off, $channel);

// 開機  

$control->turnon();

// 切換頻道  

$control->changechannel();

// 關機  

$control->turnoff();

適用場景:

1.系統需要將請求呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動。

2.系統需要在不同的時間指定請求、將請求排隊和執行請求。

3.系統需要支援命令的撤銷

(undo)

操作和恢復

(redo)

操作。

4.系統需要將一組操作組合在一起,即支援巨集命令。

優點 1.降低物件之間的耦合度。

2.新的命令可以很容易地加入到系統中。

3.可以比較容易地設計乙個組合命令。

4.呼叫同一方法實現不同的功能

缺點 使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每乙個命令都需要設計乙個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。

php物件導向設計模式

PHP設計模式 命令模式

宣告 本系列部落格參考資料 大話設計模式 作者程杰。命令模式 在軟體系統中,行為請求者 與 行為實現者 通常呈現一種 緊耦合 但在某些場合,比如要對行為進行 記錄 撤銷 重做 事務 等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將 行為請求者 與 行為實現者 解耦?將一組行為抽象為物...

PHP 設計模式 命令模式

命令模式 command pattern 是一種資料驅動的設計模式,它屬於行為型模式。請求以命令的形式包裹在物件中,並傳給呼叫物件。呼叫物件尋找可以處理該命令的合適的物件,並把該命令傳給相應的物件,該物件執行命令。意圖 將乙個請求封裝成乙個物件,從而使您可以用不同的請求對客戶進行引數化。主要解決 在...

PHP設計模式之命令模式

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