首页 > 代码库 > 八. .PHP模式设计----企业模式(1)

八. .PHP模式设计----企业模式(1)


(*暂时未拆分前端控制器和应用控制器,全部集成在Command类实现)

1 注册表模式
//注册表模式
//注册表模式用于提供一个系统级别对象,在任何地方都方便访问(可以使用单例模式)
class Registry{
    private static $instance;
    private $request;
    private function __construct(){}
    static function instance(){
        if(!isset(self::$instance)){
            self::$instance=new self();
        }
        return self::$instance;
    }
    function getRequest(){
        $this->request;
    }
    function setRequest(Request $request){
        $this->request=$request;
    }
}
class Request{}  

2 三种作用域下的注册表
namespace woo\controller;
class Request{}
class Complex{}
//创建一个具有作用域的注册表模式
//请求级别注册表
namespace woo\base;
use woo;
abstract class Registry{
    abstract protected function get($key);
    abstract protected function set($key,$val); 
}
class RequestRegistry extends Registry{
    private $values=array();
    private static $instance;
    private function __construct(){}
    //返回唯一实例
    static function instance(){
        if(!isset(self::$instance)){
            self::$instance=new self();
        }
        return self::$instance;
    }
    protected function get($key){
        if(isset($this->values[$key])){
            return isset($this->values[$key]);
        }
        return null;
    }
    protected function set($key, $val){
        $this->values[$key]=$val;
    }
    static function getRequest(){
        return self::instance()->get('request');
    }
    static function setRequest(woo\controller\Request $request){
        return self::instance()->set('request', $request);
    }
}
//会话级别的注册表
class SessionRegistry extends Registry{
    private static $instance;
    private function __construct(){
        session_start();
    }
    //返回唯一实例
    static function instance(){
        if(!isset(self::$instance)){
            self::$instance=new self();
        }
        return self::$instance;
    }
    protected function get($key){
        if( isset($_SESSION[__CLASS__][$key]) ){
            return isset($_SESSION[__CLASS__][$key]);
        }
        return null;
    }
    protected function set($key, $val){
        $_SESSION[__CLASS__][$key]=$val;
    }
    static function getComplex(){
        return self::instance()->get('complex');
    }
    static function setRequest(woo\controller\Complex $request){
        return self::instance()->set('complex', $request);
    }
}
//应用程序级别的注册表
class ApplicationRegistry extends Registry{
    private static $instance;
    private $freezedir='Data';
    private $values=array();
    private $mtimes=array();
    private function __construct(){
        session_start();
    }
    //返回唯一实例
    static function instance(){
        if(!isset(self::$instance)){
            self::$instance=new self();
        }
        return self::$instance;
    }
    //get,set都是单独保存一个$key到文件中
    protected function get($key){
        $path=$this->freezedir.DIRECTORY_SEPARATOR.$key;
        if(file_exists($path)){
            clearstatcache();
            //获取文件修改时间
            $mtime=filemtime($path);
            if(!isset($this->mtimes[$key])){
                $this->mtimes[$key]=0;
            }
            //如果文件被修改
            if($mtime > $this->mtimes[$key]){
                $data=http://www.mamicode.com/file_get_contents($path);>

八. .PHP模式设计----企业模式(1)