php设计模式 -- 命令链模式
命令链模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。
命令链模式可以使用在用户登陆注册的时候处理不同角色用户的业务逻辑,与变量值
定义多个类,相同的方法名,不同的处理逻辑,定义一个主类并实例化,根据传入的二维数组参数实例化多个对象并存入一个私有的变量中。在主类方法里循环调用实例化对象的方法,根据特定的条件处理特定的业务。
代码实例
<?php header("Content-type: text/html; charset=utf-8"); /***************************************** * 你要结婚了,但是缺钱需要借2W,于是向你想到了你的前女友们 * 你就给他们打电话(发出命令),你的前女友们会给你作出响应 * 当你凑够2W的时候就可以结婚了,就没必要再借钱了(命令停止) *****************************************/ //女友接口 interface Girlfriend{ function giveMoney($howMuch); } //这是你 class You{ //女友列表,女友是自己的所以要private,但也保不齐以后会是public (-__-)y--~ private $girlFriendList = array(); //你丫一穷光蛋,一分钱没有(是怎么泡到妞的) private $haveMoney = 0; //将你的前女友们加入列表 function callGirlfriends($myGirlfriend){ $this->girlFriendList[] = $myGirlfriend; } //借钱方法 function borrowMoney($money){ //翻开你手机通讯录,像他们挨个借钱 foreach($this->girlFriendList as $girlfriend){ $this->haveMoney += $girlfriend->giveMoney($money); //当你攒够钱的时候就放下电话,break了 if($this->haveMoney >= 20000){ echo "哥有钱结婚了"; break; } } } } //现任女友,就是你未来的老婆给你5000 class CurrentGrilfriend implements Girlfriend{ function giveMoney($howMuch){ echo "I have 5000"; return 5000; } } //你的前任是个汉子性格的女孩 class PrevGrilfriend implements Girlfriend{ function giveMoney($howMuch){ //她说。。。 echo "Get Out!"; //但依然借给了你7000 return 7000; } } //你的前前任是个富二代,因为性别的原因分开了 //但他依然爱你,希望用这么多钱能打动你 class PrevPrevGrilfriend implements Girlfriend{ function giveMoney($howMuch){ echo "Do You Love Anymore"; return 5000000; } } //于是,你就不需要问你的初恋女友借钱了 class FirstGrilfriend implements Girlfriend{ function giveMoney($howMuch){ echo "Ok"; return 5000; } } //这是你 $you = new You; //将你的前女友们加入到借钱名单中 $you->callGirlfriends(new CurrentGrilfriend); $you->callGirlfriends(new PrevGrilfriend); $you->callGirlfriends(new PrevPrevGrilfriend); $you->callGirlfriends(new FirstGrilfriend); //借钱 $you->borrowMoney(20000);