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

首頁 > 編程 > PHP > 正文

PHP設計模式之命令模式的深入解析

2020-03-22 18:27:43
字體:
來源:轉載
供稿:網友
命令模式(Command),命令模式是封裝一個通用操作的機制。如果你熟悉C或PHP,你可能已經遇到過Command,它相當于程序中的:回調(callback)。回調通常使用一個函數指針或數據結構如PHP中的字符串和數組實現,Command是在一個方法調用之上的抽象,它吸收了所有html' target='_blank'>面向對象的好處:合成、繼承和處理。例如,《設計模式》一書推薦使用Command存儲用戶行為鏈,以支持撤銷和重做操作。注意PHP 5.3函數編程能力(閉包)可以被當做Command模式的一個本地實現,但為每一個命令層次結構使用抽象數據類型有助于類型安全。



在這個模式中,Invoker(調用者)知道傳遞給它的Command,無需依賴于真實的ConcreteCommand(具體的命令)實現,解決了通過配置進行方法調用相關的問題,如UI控件按鈕和菜單等引用一個Command,它們的行為是通過通用的ConcreteCommand實例呈現的。
參與者:
◆Command(命令):在一個方法調用之上定義一個抽象;
◆ConcreteCommand(具體的命令):一個操作的實現;
◆Invoker(調用者):引用Command實例作為它可用的操作。
下面的代碼展示了Validator組件作為Command對象實現的示例:
復制代碼 代碼如下:
/**
* 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
}
}

/**
* 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設計模式中的命令模式的一些注意事項:
◆方法調用中的某些參數可以在構造ConcreteCommand時提供,有效地局部套用(currying)原始函數;
◆一個Command可以被看作是一個非常簡單的只有一個方法的策略(Strategy),重點放在對象的操作上;
◆ConcreteCommands也要組織它們需要的每一個資源,以實現它們的目標,主要是行為的Receiver(接受者),它們調用方法執行一個Command;
◆復合模式,裝飾模式和其它模式都可以和命令模式組合,獲得更多的Command,裝飾Command等等。
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝州市| 盐源县| 安康市| 扬中市| 嵩明县| 鲁甸县| 通化市| 防城港市| 托克托县| 邛崃市| 昔阳县| 资中县| 鄱阳县| 禄丰县| 平和县| 红河县| 宁安市| 科技| 三明市| 肃南| 陇川县| 临西县| 沅陵县| 八宿县| 新竹市| 和田县| 都兰县| 天全县| 达州市| 潮安县| 屯昌县| 珲春市| 天峻县| 嵊州市| 清水河县| 安多县| 车险| 石城县| 荔浦县| 盐边县| 东乡县|