国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > PHP > 正文

PHP設(shè)計(jì)模式之命令模式的深入解析

2024-05-04 23:10:25
字體:
供稿:網(wǎng)友

命令模式(Command),命令模式是封裝一個(gè)通用操作的機(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存儲(chǔ)用戶行為鏈,以支持撤銷和重做操作。

注意PHP 5.3函數(shù)編程能力(閉包)可以被當(dāng)做Command模式的一個(gè)本地實(shí)現(xiàn),但為每一個(gè)命令層次結(jié)構(gòu)使用抽象數(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對(duì)象實(shí)現(xiàn)的示例:

復(fù)制代碼 代碼如下:


/**
* The Command abstraction.
* In this case the implementation must return a result,
* sometimes it only has side effects.
*/
interface Validator
{
/**
* The method could have any parameters.
* @param mixed
* @return boolean
*/
public function isValid($value);
}

/**
* ConcreteCommand.
*/
class MoreThanZeroValidator implements Validator
{
public function isValid($value)
{
return $value > 0;
}
}

/**
* ConcreteCommand.
*/
class EvenValidator implements Validator
{
public function isValid($value)
{
return $value % 2 == 0;
}
}

/**
* The Invoker. An implementation could store more than one
* Validator if needed.
*/
class ArrayProcessor
{
protected $_rule;

public function __construct (Validator $rule)
{
$this->_rule = $rule;
}

public function process(array $numbers)
{
foreach ($numbers as $n) {
if ($this->_rule->IsValid($n)) {
echo $n, "/n";
}
}
}
}

// Client code
$processor = new ArrayProcessor(new EvenValidator());
$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è)非常簡(jiǎn)單的只有一個(gè)方法的策略(Strategy),重點(diǎn)放在對(duì)象的操作上;
◆ConcreteCommands也要組織它們需要的每一個(gè)資源,以實(shí)現(xiàn)它們的目標(biāo),主要是行為的Receiver(接受者),它們調(diào)用方法執(zhí)行一個(gè)Command;
◆復(fù)合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的Command,裝飾Command等等。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 田东县| 柳江县| 德保县| 哈密市| 丰原市| 仁寿县| 上虞市| 平潭县| 伊通| 新闻| 通许县| 安阳市| 合水县| 沂南县| 龙陵县| 阳泉市| 长宁区| 凤冈县| 马山县| 和顺县| 兴义市| 宝丰县| 京山县| 永春县| 耿马| 广昌县| 麻江县| 新绛县| 呼伦贝尔市| 葵青区| 长宁县| 巴林右旗| 斗六市| 乌恰县| 临潭县| 汉沽区| 北票市| 中西区| 根河市| 吉林省| 奎屯市|