自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP設(shè)計(jì)模式漫談之命令模式

原創(chuàng)
開發(fā) 后端 前端
PHP的命令模式相當(dāng)于程序中的回調(diào)(callback)?;卣{(diào)通常使用一個(gè)函數(shù)指針或數(shù)據(jù)結(jié)構(gòu)如PHP中的字符串和數(shù)組實(shí)現(xiàn),Command是在一個(gè)方法調(diào)用之上的抽象,它吸收了所有面向?qū)ο蟮暮锰帲汉铣?、繼承和處理。

【51CTO獨(dú)家特稿】PHP設(shè)計(jì)模式漫談我們已經(jīng)連載了四期,我們知道了代理模式責(zé)任鏈模式結(jié)構(gòu)模式;今天我們一起來討論的是命令模式(Command),命令模式是封裝一個(gè)通用操作的機(jī)制。

欲了解更多關(guān)于PHP設(shè)計(jì)模式的內(nèi)容,歡迎訪問:PHP設(shè)計(jì)模式漫談

如果你熟悉C或PHP,你可能已經(jīng)遇到過Command,它相當(dāng)于程序中的:回調(diào)(callback)?;卣{(diào)通常使用一個(gè)函數(shù)指針或數(shù)據(jù)結(jié)構(gòu)如PHP中的字符串和數(shù)組實(shí)現(xiàn),Command是在一個(gè)方法調(diào)用之上的抽象,它吸收了所有面向?qū)ο蟮暮锰帲汉铣?、繼承和處理。

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

注意PHP 5.3函數(shù)編程能力(閉包)可以被當(dāng)做Command模式的一個(gè)本地實(shí)現(xiàn),但為每一個(gè)命令層次結(jié)構(gòu)使用抽象數(shù)據(jù)類型有助于類型安全。

PHP設(shè)計(jì)模式中的命令模式 
PHP設(shè)計(jì)模式中的命令模式

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

參與者:

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

◆ConcreteCommand(具體的命令):一個(gè)操作的實(shí)現(xiàn);

◆Invoker(調(diào)用者):引用Command實(shí)例作為它可用的操作。

下面的代碼展示了Validator組件作為Command對象實(shí)現(xiàn)的示例:

  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設(shè)計(jì)模式中的命令模式的一些注意事項(xiàng):

◆方法調(diào)用中的某些參數(shù)可以在構(gòu)造ConcreteCommand時(shí)提供,有效地局部套用(currying)原始函數(shù);

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

◆ConcreteCommands也要組織它們需要的每一個(gè)資源,以實(shí)現(xiàn)它們的目標(biāo),主要是行為的Receiver(接受者),它們調(diào)用方法執(zhí)行一個(gè)Command;

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

 

【編輯推薦】

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

2010-04-19 09:30:00

工廠模式PHP設(shè)計(jì)模式

2010-03-25 08:52:30

PHP設(shè)計(jì)模式代理模式

2010-04-08 09:27:04

PHP設(shè)計(jì)模式結(jié)構(gòu)模式

2010-04-21 08:38:18

解釋器模式PHP設(shè)計(jì)模式

2010-04-01 09:10:03

PHP設(shè)計(jì)模式責(zé)任鏈模式

2010-04-29 08:53:11

PHP迭代器模式

2010-05-06 08:44:37

調(diào)解者模式

2011-04-21 09:46:41

設(shè)計(jì)模式

2023-05-04 08:47:31

命令模式抽象接口

2020-11-03 13:05:18

命令模式

2020-08-21 07:23:50

工廠模式設(shè)計(jì)

2012-07-10 02:01:53

設(shè)計(jì)模式命令模式

2021-06-09 08:53:34

設(shè)計(jì)模式策略模式工廠模式

2012-02-29 09:41:14

JavaScript

2015-09-08 13:39:10

JavaScript設(shè)計(jì)模式

2012-01-13 15:59:07

2021-12-24 07:50:45

責(zé)任鏈模式設(shè)計(jì)

2023-09-04 13:14:00

裝飾器設(shè)計(jì)模式

2021-06-16 08:56:06

模版方法模式設(shè)計(jì)模式行為型設(shè)計(jì)模式

2021-06-29 08:54:23

設(shè)計(jì)模式代理模式遠(yuǎn)程代理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號