ÀÏÉú³£Ì¸PHPÃæÏò¶ÔÏóÖ®ÃüÁîģʽ(±Ø¿´Æª)

5年以前  |  阅读数:969 次  |  编程语言:PHP 

Õa¸oģʽÖ÷ÒªÓÉ ÃuÁiÀa¡¢Óû§ÇeÇoÊý¾ÝÀa¡¢ÒµÎñÂß¼­Àa¡¢ÃuÁiÀa¹¤³§Àa¼°µ÷ÓÃÀa¹¹³É£¬¸÷¸oÀaµÄ×÷ÓøÅÀ¨ÈçÏ£º

1¡¢ÃuÁiÀa£ºµ÷ÓÃÓû§ÇeÇoÊý¾ÝÀaºÍÒµÎñÂß¼­Àa£»

2¡¢Óû§ÇeÇoÊý¾ÝÀa£º»ñÈ¡Óû§ÇeÇoÊý¾Ý¼°±£´aeºǫ´¦Àiºo*µ»ØµÄ½a¹u£»

3¡¢ÒµÎñÂß¼­Àa£ºÈçÒÔϵÄʾÀýÖÐÑeÖ¤Óû§µÇ½ÐÅÏ¢ÊÇñÕýȵŦÄܵȣ»

4¡¢ÃuÁi¹¤³§Àa(ÎÒ×Ô¼ºÈ¡µÄÃu×Ö,¹þ¹þ)£ºÉu³ÉÃuÁiÀaµÄʵÀý£¬Õa¸oÀaµÚÒ»´Î¿´µÄʱºoÎÒ¾oµÃÓеaŒÅ£¬µ±È»¿´Á˼¸±eÁË»¹ÊǾoµÃºÜŒÅ £º£(C)£»

5¡¢µ÷ÓÃÀa£ºµ÷ÓÃÃuÁiÀa£¬Éu³ÉÊÓͼ£»

Ö±½Ó¿´´uÂe£º


    //ÃuÁiÀa
    abstract class Command {
    ¡¡¡¡abstract function execute(CommandContext $context);
    }

    class LoginCommand extends Command{¡¡¡¡¡¡¡¡¡¡¡¡¡¡//´¦ÀiÓû§µÇ½ÐÅÏ¢µÄÃuÁiÀa
    ¡¡¡¡function execute (CommandCotext $context){¡¡¡¡¡¡¡¡//CommandCotext ÊÇÒ»¸o´¦ÀiÓû§ÇeÇoÊý¾ÝºÍºǫ»ØÀ¡Êý¾ÝµÄÀa
    ¡¡¡¡¡¡¡¡$manager = Registry::getAccessManager();¡¡¡¡//Ô­ÎÄ´uÂeÖв¢Ã»ÓоßÌaµÄʵÏÖ£¬µ«ËµÃ÷ÁËÕaÊÇÒ»¸o´¦ÀiÓû§µÇ½ÐÅÏ¢µÄÒµÎñÂß¼­Àa
    ¡¡¡¡¡¡¡¡$user = $context->get('username');
    ¡¡¡¡¡¡¡¡$pass = $context->get('pass');
    ¡¡¡¡¡¡¡¡$user_obj = $manager->login($user,$pass);
    ¡¡¡¡¡¡¡¡if(is_null($user_obj)){
    ¡¡¡¡¡¡¡¡¡¡¡¡$context->setError($manager->getError);
    ¡¡¡¡¡¡¡¡¡¡¡¡return false;
    ¡¡¡¡¡¡¡¡}
    ¡¡¡¡¡¡¡¡$context->addParam('user',$user_obj);
    ¡¡¡¡¡¡¡¡return true;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//Óû§µÇ½³É¹¦*µ»Øtrue
    ¡¡¡¡}
    }

    class FeedbackCommand extends Command{¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//*¢ËÍÓʼþµÄÃuÁiÀa
    ¡¡¡¡function execute(CommandContext $context){
    ¡¡¡¡¡¡¡¡$msgSystem = Registry::getMessageSystem();
    ¡¡¡¡¡¡¡¡$email = $context->get('email');
    ¡¡¡¡¡¡¡¡$msg = $context->get('msg');
    ¡¡¡¡¡¡¡¡$topic = $context->get('topci');
    ¡¡¡¡¡¡¡¡$result = $msgSystem->send($email,$msg,$topic);
    ¡¡¡¡¡¡¡¡if(!$result){
    ¡¡¡¡¡¡¡¡¡¡¡¡$context->setError($msgSystem->getError());
    ¡¡¡¡¡¡¡¡¡¡¡¡return false;
    ¡¡¡¡¡¡¡¡}
    ¡¡¡¡¡¡¡¡return true;
    ¡¡¡¡}
    }

    //Óû§ÇeÇoÊý¾ÝÀa  
    class CommandContext {
    ¡¡¡¡private $params = array();
    ¡¡¡¡private $error = '';

    ¡¡¡¡function __construct (){
    ¡¡¡¡$this->params = $_REQUEST;
    }

    function addParam($key,$val){
    ¡¡¡¡$this->params[$key] = $val;
    }

    function get($key){
    ¡¡¡¡return $this->params[$key];
    }

    function setError($error){
    ¡¡¡¡$this->error = $error;
    }

    function getError(){
    ¡¡¡¡return $this->error;
    }
    }


    //ÃuÁiÀa¹¤³§,Õa¸oÀa¸u¾ÝÓû§ÇeÇoÊý¾ÝÖеÄactionÀ´Éu³ÉÃuÁiÀa
    class CommandNotFoundException extends Exception {}

    class CommandFactory {
    ¡¡¡¡private static $dir = 'commands';

    ¡¡¡¡static function getCommand($action='Default'){
    ¡¡¡¡¡¡¡¡if(preg_match('/\w',$action)){
    ¡¡¡¡¡¡¡¡¡¡¡¡throw new Exception("illegal characters in action");
    ¡¡¡¡¡¡¡¡}
    ¡¡¡¡¡¡¡¡$class = UCFirst(strtolower($action))."Command";
    ¡¡¡¡¡¡¡¡$file = self::$dir.DIRECTORY_SEPARATOR."{$class}.php"; //DIRECTORY_SEPARATOR´u±i'/',ÕaÊÇÒ»¸oÃuÁiÀaÎļþµÄÂ*¾¶
    ¡¡¡¡¡¡¡¡if(!file_exists($file)){
    ¡¡¡¡¡¡¡¡¡¡¡¡throw new CommandNotFoundException("could not find '$file'");
    ¡¡¡¡¡¡¡¡}
    ¡¡¡¡¡¡¡¡require_once($file);
    ¡¡¡¡¡¡¡¡if(!class_exists($class)){
    ¡¡¡¡¡¡¡¡¡¡¡¡throw new CommandNotFoundException("no '$class' class located");
    ¡¡¡¡¡¡¡¡}
    ¡¡¡¡¡¡¡¡$cmd = new $class();
    ¡¡¡¡¡¡¡¡return $cmd;
    ¡¡¡¡}
    }

    //µ÷ÓÃÕßÀa,Ïaµ±ÓÚÒ»¸o˾Ái²¿Ëuͳ³iËuÓеÄ×ÊÔ´
    class Controller{
    ¡¡¡¡private $context;
    ¡¡¡¡function __construct(){
    ¡¡¡¡¡¡¡¡$this->context = new CommandContext();  //Óû§ÇeÇoÊý¾Ý
    ¡¡¡¡}
    ¡¡¡¡function getContext(){
    ¡¡¡¡¡¡¡¡return $this->context;
    ¡¡¡¡}

    ¡¡¡¡function process(){
    ¡¡¡¡¡¡¡¡$cmd = CommandFactory::getCommand($this->context->get('action'));¡¡¡¡¡¡¡¡//ͨ¹ýÃuÁi¹¤³§ÀaÀ´»ñÈ¡ÃuÁiÀa
    ¡¡¡¡¡¡¡¡if(!$comd->execute($this->context)){¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
    ¡¡¡¡¡¡¡¡¡¡¡¡//´¦Àiʧ°Ü
    ¡¡¡¡¡¡¡¡} else {
    ¡¡¡¡¡¡¡¡¡¡¡¡//³É¹¦
    ¡¡¡¡¡¡¡¡¡¡¡¡// *Ö*¢ÊÓͼ
    ¡¡¡¡¡¡¡¡}
    ¡¡¡¡}
    }

    // ¿Í»§¶Ë
    $controller = new Controller();
    //αÔiÓû§ÇeÇo,ÕaeʵµÄ³¡¾°ÖÐÕaÐ(C)²ÎÊýÓ¦¸ÃÊÇͨ¹ýpost»ogetµÄ*½Ê½»ñÈ¡µÄ£¬Ã²ËÆÓÖ*Ï»°ÁË£º£(C)
    $context = $controller->getContext();
    $context->addParam('action','login');
    $context->addParam('username','bob');
    $context->addParam('pass','tiddles');
    $controller->process();

ÒÔÉÏÕaƪÀÏÉu³£Ì¸PHPÃaeÏo¶ÔÏoÖ®ÃuÁiģʽ(±Ø¿´Æª)¾ÍÊÇС±a*ÖÏi¸ø´o¼ÒµÄÈ«²¿ÄÚÈÝÁË£¬Ï£ÍuÄܸø´o¼ÒÒ»¸o²Î¿¼£¬Ò²Ï£Íu´o¼Ò¶a¶aÖ§³Ö½Å±¾Ö®¼Ò¡£

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例