成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP設計模式漫談之命令模式

原創
開發 后端 前端
PHP的命令模式相當于程序中的回調(callback)。回調通常使用一個函數指針或數據結構如PHP中的字符串和數組實現,Command是在一個方法調用之上的抽象,它吸收了所有面向對象的好處:合成、繼承和處理。

【51CTO獨家特稿】PHP設計模式漫談我們已經連載了四期,我們知道了代理模式、責任鏈模式結構模式;今天我們一起來討論的是命令模式(Command),命令模式是封裝一個通用操作的機制。

欲了解更多關于PHP設計模式的內容,歡迎訪問:PHP設計模式漫談

如果你熟悉C或PHP,你可能已經遇到過Command,它相當于程序中的:回調(callback)?;卣{通常使用一個函數指針或數據結構如PHP中的字符串和數組實現,Command是在一個方法調用之上的抽象,它吸收了所有面向對象的好處:合成、繼承和處理。

例如,《設計模式》一書推薦使用Command存儲用戶行為鏈,以支持撤銷和重做操作。

注意PHP 5.3函數編程能力(閉包)可以被當做Command模式的一個本地實現,但為每一個命令層次結構使用抽象數據類型有助于類型安全。

PHP設計模式中的命令模式 
PHP設計模式中的命令模式

在這個模式中,Invoker(調用者)知道傳遞給它的Command,無需依賴于真實的ConcreteCommand(具體的命令)實現,解決了通過配置進行方法調用相關的問題,如UI控件按鈕和菜單等引用一個Command,它們的行為是通過通用的ConcreteCommand實例呈現的。

參與者:

◆Command(命令):在一個方法調用之上定義一個抽象;

◆ConcreteCommand(具體的命令):一個操作的實現;

◆Invoker(調用者):引用Command實例作為它可用的操作。

下面的代碼展示了Validator組件作為Command對象實現的示例:

  1. /**  
  2.  * The Command abstraction.  
  3.  * In this case the implementation must return a result,  
  4.  * sometimes it only has side effects.  
  5.  */ 
  6. interface Validator  
  7. {  
  8.     /**  
  9.      * The method could have any parameters.  
  10.      * @param mixed  
  11.      * @return boolean  
  12.      */ 
  13.     public function isValid($value);  
  14. }  
  15.  
  16. /**  
  17.  * ConcreteCommand.  
  18.  */ 
  19. class MoreThanZeroValidator implements Validator  
  20. {  
  21.     public function isValid($value)  
  22.     {  
  23.         return $value > 0;  
  24.     }  
  25. }  
  26.  
  27. /**  
  28.  * ConcreteCommand.  
  29.  */ 
  30. class EvenValidator implements Validator  
  31. {  
  32.     public function isValid($value)  
  33.     {  
  34.         return $value % 2 == 0;  
  35.     }  
  36. }  
  37.  
  38. /**  
  39.  * The Invoker. An implementation could store more than one  
  40.  * Validator if needed.  
  41.  */ 
  42. class ArrayProcessor  
  43. {  
  44.     protected $_rule;  
  45.  
  46.     public function __construct (Validator $rule)  
  47.     {  
  48.         $this->_rule = $rule;  
  49.     }  
  50.  
  51.     public function process(array $numbers)  
  52.     {  
  53.         foreach ($numbers as $n) {  
  54.             if ($this->_rule->IsValid($n)) {  
  55.                 echo $n"\n";  
  56.             }  
  57.         }  
  58.     }  
  59. }  
  60.  
  61. // Client code  
  62. $processor = new ArrayProcessor(new EvenValidator());  
  63. $processor->process(array(1, 20, 18, 5, 0, 31, 42)); 

使用PHP設計模式中的命令模式的一些注意事項:

◆方法調用中的某些參數可以在構造ConcreteCommand時提供,有效地局部套用(currying)原始函數;

◆一個Command可以被看作是一個非常簡單的只有一個方法的策略(Strategy),重點放在對象的操作上;

◆ConcreteCommands也要組織它們需要的每一個資源,以實現它們的目標,主要是行為的Receiver(接受者),它們調用方法執行一個Command;

◆復合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的Command,裝飾Command等等。

 

【編輯推薦】

  1. 讓PHP開發者事半功倍的十大技巧
  2. 專家暢談ASP.NET與PHP的未來
  3. Facebook揭秘HipHop項目 PHP程序大提速
責任編輯:佚名 來源: 51CTO.com
相關推薦

2010-03-25 08:52:30

PHP設計模式代理模式

2010-04-19 09:30:00

工廠模式PHP設計模式

2010-04-01 09:10:03

PHP設計模式責任鏈模式

2010-04-29 08:53:11

PHP迭代器模式

2010-04-08 09:27:04

PHP設計模式結構模式

2010-04-21 08:38:18

解釋器模式PHP設計模式

2010-05-06 08:44:37

調解者模式

2011-04-21 09:46:41

設計模式

2020-11-03 13:05:18

命令模式

2023-05-04 08:47:31

命令模式抽象接口

2020-08-21 07:23:50

工廠模式設計

2015-09-08 13:39:10

JavaScript設計模式

2021-06-16 08:56:06

模版方法模式設計模式行為型設計模式

2012-01-13 15:59:07

2021-12-24 07:50:45

責任鏈模式設計

2023-09-04 13:14:00

裝飾器設計模式

2021-06-29 08:54:23

設計模式代理模式遠程代理

2012-07-10 02:01:53

設計模式命令模式

2021-06-09 08:53:34

設計模式策略模式工廠模式

2012-02-29 09:41:14

JavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合 | 色在线免费视频 | 祝你幸福电影在线观看 | 日韩精品在线一区 | 欧美日韩专区 | 亚洲欧美一区二区三区在线 | 国产激情视频网 | 九九综合 | 在线观看精品视频网站 | 综合久 | 久久久久久网站 | 久精品久久| 久久精品亚洲精品国产欧美 | 国产一区二区免费 | 先锋资源吧 | 国产免费国产 | 精品免费国产一区二区三区四区 | 日韩精品一区二区三区在线观看 | 看片wwwwwwwwwww | 欧美一二三| 丁香婷婷久久久综合精品国产 | 美日韩免费视频 | 国产精品日日做人人爱 | 精品一区二区三区在线观看 | 日韩一区精品 | 午夜av一区二区 | 久久久久久久综合色一本 | 欧美日韩综合视频 | 日韩欧美国产一区二区 | 亚洲精品视频观看 | 日韩精品久久久久 | 日本久久一区二区三区 | 国产精品中文字幕一区二区三区 | 男女视频在线观看 | 97久久精品午夜一区二区 | 91精品国产91久久综合桃花 | 日韩一区二区三区在线 | 国产精品1区 | 操到爽| 国产在线www | 日韩欧美在线观看 |