Heim > Backend-Entwicklung > PHP-Tutorial > Befehlsmuster für PHP-Entwurfsmuster

Befehlsmuster für PHP-Entwurfsmuster

高洛峰
Freigeben: 2016-11-22 09:48:31
Original
924 Leute haben es durchsucht

Konzept

Übergeben Sie die Anfrage vom Client an ein Objekt, sodass Sie den Client mit verschiedenen Anfragen parametrisieren können. Wird verwendet, um „Verhaltensanforderer“ und „Verhaltensumsetzer“ zu entkoppeln, um eine lose Kopplung zwischen den beiden zu erreichen und sich an Änderungen anzupassen.

Rolle

Befehl (Befehl): definiert eine Abstraktion über einem Methodenaufruf;

ConcreteCommand (konkreter Befehl): die Implementierung einer Operation; 🎜>Aufrufer: Bezieht sich auf die Befehlsinstanz als ihre verfügbaren Operationen.

Code

Der Code lautet wie folgt:

Laufergebnis:
<?php
header(&#39;Content-type:text/html;charset=uft-8&#39;);
/**
 * 命令模式
 */

/**
 * Interface Validator 命令接口
 */
interface Command
{
    /**
     * 有任何参数的方法
     * @param mixed
     * @return boolean
     */
    public function isValid($value);
}

/**
 * Class MoreThanZeroValidator 具体命令
 */
class ConcreteCommand implements Command
{
    /**
     * 实现验证方法
     *
     * @param $value
     *
     * @return bool
     */
    public function isValid($value)
    {
        // 大于0的数字
        return $value > 0;
    }
}

/**
 * Class ConcreteCommandTwo 具体命令2
 */
class ConcreteCommandTwo implements Command
{
    /**
     * 实现验证方法
     *
     * @param $value
     *
     * @return bool
     */
    public function isValid($value)
    {
        // 能被2整除的数字
        return $value % 2 == 0;
    }
}

/**
 * Class Invoker 调用者
 */
class Invoker
{
    protected $_rule;

    /**
     * 构造方法
     * 接收具体命令对象
     * Invoker constructor.
     *
     * @param Command $rule
     */
    public function __construct (Command $rule)
    {
        $this->_rule = $rule;
    }

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

/**
 * Class Client 客户端
 */
class Client {
    /**
     * 测试
     */
    public static function test()
    {
        $invoker = new Invoker(new ConcreteCommand());
        $invoker->process(array(-1,-4,-8,1, 10, 15, 20, 36, 48, 59,111));
        echo &#39;<br>&#39;;
        $invoker = new Invoker(new ConcreteCommandTwo());
        $invoker->process(array(-1,-4,-8,1, 10, 15, 20, 36, 48, 59,111));
    }
}

// 执行测试
Client::test();
Nach dem Login kopieren

1 10 15 20 36 48 59 111 
-4 -8 10 20 36 48
Nach dem Login kopieren

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage