设计模式十一:命令链模式

命令链模式:

  通过向一组程序发送处理命令,那个处理结束了则返回,否则就继续执行该组命令的下一条。

<?php

/**
 * 登录接口
 */
interface LoginInterface{
    public function login($role,$name);
}

class NormalLogin implements LoginInterface{
    public function login($role,$name){
        if($role == 'normal'){
            echo '鼓掌欢迎:'.$name.PHP_EOL;
            return true;
        }
        return false;
    }
}

class VipLogin implements LoginInterface{
    public function login($role,$name)
    {
        if($role == 'vip'){
            echo '鲜花,跑车出场欢迎:'.$name.PHP_EOL;
            return true;
        }
        return false;        
    }
}

/**
 * 命令容器
 */
class LoginContainer {
    protected $logins;

    //注册类
    public function regist($concrete){
        $this->logins[] = $concrete;
    }
    //循环执行命令,若成功则停止
    public function run($role,$name){
        foreach($this->logins as $login){
            if($login->login($role,$name)){
                return ;
            }
        }
    }
}

$login = new LoginContainer();
$login->regist(new NormalLogin());
$login->regist(new VipLogin());

$login->run('vip','小明');

posted @ 2021-08-26 17:27  wish_yang  阅读(147)  评论(0编辑  收藏  举报