PHP設計模式——命令模式_PHP教程

來源:互聯網
上載者:User

PHP設計模式——命令模式


命令模式:在軟體系統中,“行為要求者”與“行為實現者”通常呈現一種“緊耦合”。但在某些場合,比如要對行為進行“記錄、撤銷/重做、事務”等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將“行為要求者”與“行為實現者”解耦?將一組行為抽象為對象,實現二者之間的松耦合。這就是命令模式。

類圖:

角色分析:

抽象命令:定義命令的介面,聲明執行的方法。

具體命令:命令介面實現對象,是“虛”的實現;通常會持有接收者,並調用接收者的功能來完成命令要執行的操作。

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

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

核心代碼:

;    }    /**     * 關閉電視機     */    public function turnOff()    {        echo The television is off..;    }    /**切換頻道     * @param $channel    頻道     */    public function turnChannel($channel)    {        $this->curr_channel=$channel;        echo This TV Channel is .$this->curr_channel.;    }}/**執行命令介面 * Interface ICommand */interface ICommand{    function execute();}/**開機命令 * Class CommandOn */class CommandOn implements  ICommand{    private $tv;    public function __construct($tv)    {        $this->tv=$tv;    }    public function execute()    {        $this->tv->turnOn();    }}/**關機命令 * Class CommandOn */class CommandOff implements  ICommand{    private $tv;    public function __construct($tv)    {        $this->tv=$tv;    }    public function execute()    {        $this->tv->turnOff();    }}/**切換頻道命令 * Class CommandOn */class CommandChannel implements  ICommand{    private $tv;    private $channel;    public function __construct($tv,$channel)    {        $this->tv=$tv;        $this->channel=$channel;    }    public function execute()    {        $this->tv->turnChannel($this->channel);    }}/**遙控器 * Class Control */class Control{    private $_onCommand;    private $_offCommand;    private $_changeChannel;    public function __construct($on,$off,$channel)    {        $this->_onCommand = $on;        $this->_offCommand = $off;        $this->_changeChannel = $channel;    }    public function turnOn()    {        $this->_onCommand->execute();    }    public function  turnOff()    {        $this->_offCommand->execute();    }    public function changeChannel()    {        $this->_changeChannel->execute();    }}

調用用戶端代碼:

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.調用同一方法實現不同的功能

http://www.bkjia.com/PHPjc/1015090.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1015090.htmlTechArticlePHP設計模式——命令模式 命令模式:在軟體系統中,行為要求者與行為實現者通常呈現一種緊耦合。但在某些場合,比如要對行為進行記錄...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.