亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP命令Command模式用法實例分析

2024-05-05 00:04:54
字體:
來源:轉載
供稿:網友

本文實例講述了PHP命令Command模式用法。分享給大家供大家參考,具體如下:

命令Command模式是GOF23種模式中的一種,是一種行為模式。這種模式很難理解?!对O計模式》一書中對它語焉不詳。而網上的一些文章對其的解釋也是錯誤的。實際上,命令模式并不是那么神秘。

命令模式的理解,關鍵有2點:

1. 使用接口。通常命令模式的接口中只有一個方法。 實現類的方法有不同的功能,覆蓋接口中的方法。在面向對象編程中,大量使用if…else…,或者switch…case…這樣的條件選擇語句是“最差實踐”。通常這類代碼,意味著有重構的余地。命令模式就是干掉條件選擇語句的利器。

首先提供一個接口:

public interface Command {  public void execute();}

然后提供這個接口的實現類。每一個實現類的方法就是if…else…的一個代碼塊中的代碼。這樣,調用方直接把一個具體類的實例傳進來即可。如:

Public void test(Command para){  Para.execute();}

不需要再判斷出現了哪種情況,應該執行哪一段代碼。一切的問題都由調用方處理。

如果不使用命令模式,那么如果情況逐步增多,如,從原來的2種,增加到20種,那么方法中的判斷就會從1次增加到19次。而使用命令模式,僅僅調用方需要從2個實現類增加到20個實現類即可。上面的test方法根本不需要做任何改變。

2. 主要的用途是,使用參數回調模式。

最主要使用命令模式的方式是使用參數回調模式。命令接口作為方法的參數傳遞進來。然后,在方法體內回調該接口。

當然,命令模式還可以使用其他方式來使用。不一定非用參數回調模式。

了解完這些之后,可以看一下下面的程序例子。

<?php  /**   * 命令模式   *   * 將一個請求封裝為一個對象從而使你可用不同的請求對客戶進行參數化,對請求排除或記錄請求日志,以及支持可取消的操作   */  // 命令接口  interface Command  {    public function execute();  }  class Invoker  {    private $_command = array();    public function setCommand($command) {      $this->_command[] = $command;    }    public function executeCommand()    {      foreach($this->_command as $command)      {        $command->execute();      }    }    public function removeCommand($command)    {      $key = array_search($command, $this->_command);      if($key !== false)      {        unset($this->_command[$key]);      }    }  }  // 命令接受者  class Receiver  {    private $_name = null;    public function __construct($name) {      $this->_name = $name;    }    public function action()    {       echo $this->_name." 執行攻擊命令(action)<br />";    }    public function action1()    {      echo $this->_name." 執行防御命令(action1)<br/>";    }  }  // 具體的命令  class ConcreteCommand implements Command  {    private $_receiver;    public function __construct($receiver)    {      $this->_receiver = $receiver;    }    public function execute()    {      $this->_receiver->action();    }  }  // 具體命令1  class ConcreteCommand1 implements Command  {    private $_receiver;    public function __construct($receiver)    {      $this->_receiver = $receiver;    }    public function execute()    {      $this->_receiver->action1();    }  }  // 具體命令2  class ConcreteCommand2 implements Command  {    private $_receiver;    public function __construct($receiver)    {      $this->_receiver = $receiver;    }    public function execute()    {      $this->_receiver->action();      $this->_receiver->action1();    }  }  $objRecevier = new Receiver("小狗");  $objRecevier1 = new Receiver("刺蛇");  $objRecevier2 = new Receiver("雷獸");  $objCommand = new ConcreteCommand($objRecevier);  $objCommand1 = new ConcreteCommand1($objRecevier);  $objCommand2 = new ConcreteCommand($objRecevier1);  $objCommand3 = new ConcreteCommand1($objRecevier1);  $objCommand4 = new ConcreteCommand2($objRecevier2); // 使用 Recevier的兩個方法  $objInvoker = new Invoker();  $objInvoker->setCommand($objCommand);  $objInvoker->setCommand($objCommand1);  $objInvoker->executeCommand();  $objInvoker->removeCommand($objCommand1);  $objInvoker->executeCommand();  $objInvoker->setCommand($objCommand2);  $objInvoker->setCommand($objCommand3);  $objInvoker->setCommand($objCommand4);  $objInvoker->executeCommand();?>

程序運行結果:

小狗 執行攻擊命令(action)
小狗 執行防御命令(action1)
小狗 執行攻擊命令(action)
小狗 執行攻擊命令(action)
刺蛇 執行攻擊命令(action)
刺蛇 執行防御命令(action1)
雷獸 執行攻擊命令(action)
雷獸 執行防御命令(action1)

命令模式的核心思想是,帶有某個方法的具體類的實例,作為接口傳給使用方。對象的具體類型信息消失。在使用方代碼中拿到這個接口后調用這個接口的方法。

具體的執行效果,取決的命令發起人提供的對象是哪一個實現類的。這給了命令發起人完全的控制能力,而使用方代碼不關心具體的命令類和方法。同時也使條件判斷語句成為多余。

簡單嗎?命令模式其實就是這么簡單。

其實,GOF的23個設計模式中,好幾個模式使用了相同的技巧來實現。GOF對模式的劃分,是根據目的來的,而不是技巧來的。因此,Command模式和策略模式等其實使用的技法是一樣的。 上回和一個同事聊技術。他的背景是Windows C++和Windows驅動開發。 他說,他不知道什么設計模式。他覺得最有用的就是回調函數。Command模式也是使用回調函數。java沒有函數指針,java中一切都是類和類的實例。因此,就需要使用一個只有一個函數的接口,它的實例表示函數指針。其實是一回事。

設計模式是比較低層次的設計思想。在更高層次上,還有更加宏觀的一些設計技巧。 Bob大叔的一本書不錯,忘記名字了。 《Unix編程藝術》也不錯,都是講更高層次上的設計的。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品全部视频在线播放| 日韩在线不卡视频| 欧美视频中文字幕在线| 97精品国产97久久久久久春色| 精品国产成人在线| 亚洲最大的成人网| 久久6免费高清热精品| 亚洲欧美中文字幕在线一区| 欧美成年人网站| www.国产精品一二区| 亚洲免费av网址| 国产在线播放不卡| 国产精品丝袜一区二区三区| 日韩精品在线视频美女| 欧美精品一二区| 欧美日韩xxxxx| 日韩av免费网站| 欧美另类交人妖| 欧美色播在线播放| 在线观看日韩www视频免费| 国产剧情日韩欧美| 久久久久久久久久久久av| 国产成人在线视频| 91久久嫩草影院一区二区| 亚洲人成网7777777国产| 国产精品久久久久久久久久久久| 91在线国产电影| 日韩精品在线第一页| 亚洲精品久久在线| 日韩在线观看你懂的| 日韩视频欧美视频| 日本高清久久天堂| 国产欧美一区二区白浆黑人| 亚洲人成在线观看网站高清| 欧美大秀在线观看| 久久精品影视伊人网| 国产成人在线亚洲欧美| 欧美成人第一页| 国产精品日韩精品| 97视频人免费观看| 欧美亚洲成人免费| 亚洲色图第一页| 成人激情黄色网| 久久精品中文字幕电影| 国产精品久久久久久搜索| 国产精品视频白浆免费视频| 日本久久久久久| 亚洲激情在线视频| 亚洲成人网久久久| 国产精品伦子伦免费视频| 欧美日韩中国免费专区在线看| 国产91免费看片| 亚洲成色999久久网站| 91影视免费在线观看| 精品高清一区二区三区| 在线视频中文亚洲| 欧美中文字幕在线视频| 粗暴蹂躏中文一区二区三区| 国产日韩欧美中文在线播放| 久久精品国产免费观看| 国产在线不卡精品| 欧美华人在线视频| 亚洲欧美另类自拍| 91久久综合亚洲鲁鲁五月天| 91欧美激情另类亚洲| 久久久久久久亚洲精品| 俺去亚洲欧洲欧美日韩| 96sao精品视频在线观看| 欧美电影免费看| 欧美国产日产韩国视频| 中日韩美女免费视频网站在线观看| 国产欧美最新羞羞视频在线观看| 国产一区二区激情| 亚洲午夜小视频| 51精品在线观看| 国产精品一区av| 欧美高清视频免费观看| 国内精品久久久久久久| 欧美区二区三区| 欧美成人免费va影院高清| 亚洲丝袜av一区| 国产精品自产拍高潮在线观看| 欧美一级黄色网| 色久欧美在线视频观看| 亚洲福利视频专区| 亚洲精品国产精品国自产观看浪潮| 91精品国产乱码久久久久久久久| 中文国产亚洲喷潮| 亚洲色图35p| 欧美精品999| 亚洲精品国产品国语在线| 欧美激情精品久久久久久蜜臀| 欧美洲成人男女午夜视频| 68精品国产免费久久久久久婷婷| 8x海外华人永久免费日韩内陆视频| 国产91精品久久久久久| 日本精品免费一区二区三区| 国产精品爽爽爽爽爽爽在线观看| 成人免费在线网址| 成人写真视频福利网| 91夜夜未满十八勿入爽爽影院| 国产精品大片wwwwww| 青青草一区二区| 亚洲激情在线观看| 一区二区欧美久久| 国产精品一区二区三| 成人av在线亚洲| 国产日韩在线免费| 欧美激情网站在线观看| 中文字幕亚洲情99在线| 日韩av电影手机在线| 国内精品久久久久伊人av| 日韩成人性视频| 国产欧美精品一区二区三区介绍| 69视频在线播放| 亚洲bt欧美bt日本bt| 日韩精品中文字幕在线播放| 亚洲色无码播放| 午夜精品久久久久久久99热浪潮| 亚洲毛片在线免费观看| 日韩高清电影免费观看完整版| 欧美日韩精品在线观看| 一个人看的www欧美| 97国产真实伦对白精彩视频8| 亚洲天堂一区二区三区| 成人黄色在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 九色精品免费永久在线| 亚洲一区二区三区乱码aⅴ| 国产综合久久久久| 日韩欧美在线观看视频| 国产欧美精品va在线观看| 欧美精品www在线观看| 亚洲一区二区福利| 久久这里只有精品99| 亚洲一区av在线播放| 在线观看久久av| 欧美激情在线观看视频| 亚洲福利精品在线| 国产免费一区视频观看免费| 亚洲xxxx做受欧美| 精品女同一区二区三区在线播放| 亚洲成人三级在线| 久久久久久久999| 日韩中文字幕在线视频| 最近2019中文免费高清视频观看www99| 国产精品91在线| 国产精品成av人在线视午夜片| 中文字幕久久久av一区| 中文字幕亚洲二区| 国产国语刺激对白av不卡| 午夜精品久久久久久99热| 美女少妇精品视频| 亚洲精品mp4| 日韩免费在线观看视频| 精品毛片网大全| 日韩高清电影好看的电视剧电影| 国产精品av免费在线观看| 欧美壮男野外gaytube| 欧美国产精品人人做人人爱| 国产精品丝袜高跟| 欧美国产乱视频| 亚洲精品自拍第一页| 国产精品96久久久久久又黄又硬|