设计模式十一:命令链模式
命令链模式:
通过向一组程序发送处理命令,那个处理结束了则返回,否则就继续执行该组命令的下一条。
<?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','小明');