命令链模式:

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



<?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','小明');


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