php模式设计之 注册树模式

注册树模式

 注册树模式固然也叫注册模式,注册器模式。数组

顾名思义,注册器模式就是将对象注册到全局树上,那么他就能够被任意地方访问。this

为何要采用注册树模式?

单例模式解决的是如何在整个项目中建立惟一对象实例的问题,工厂模式解决的是如何不经过new创建实例对象的方法。 那么注册树模式想解决什么问题呢? 实际上这两种都有一个缺点(可能也不该该称为缺点,也可叫不足),有一个比较好的方法就是已经建立好的这个对象,直接去取这个对象,这个就是注册器模式。code

如何实现注册树?

首先咱们须要一个做为注册树的类,这毋庸置疑。全部的对象“插入”到注册树上。这个注册树应该由一个静态变量来充当。并且这个注册树应该是一个二维数组。这个类应该有一个插入对象实例的方法(set()),当让相对应的就应该有一个撤销对象实例的方法(_unset())。固然最重要的是还须要有一个读取对象的方法(get())。拥有这些,咱们就能够愉快地完成注册树模式啦~对象

代码实现

//建立单例
class Single{
   public $hash;
   static protected $ins=null;
   final protected function __construct(){
       $this->hash=rand(1,9999);
   }

   static public function getInstance(){
       if (self::$ins instanceof self) {
           return self::$ins;
       }
       self::$ins=new self();
       return self::$ins;
   } 
}

//工厂模式
class RandFactory{
   public static function factory(){
       return Single::getInstance();
   }
}

//注册树
class Register{
	//全局树  array
   protected static $objects;
	
	//设置
   public static function set($alias,$object){
       self::$objects[$alias]=$object;
   }
	
	//得到
   public static function get($alias){
       return self::$objects[$alias];
   }
	
	//注销
   public static function _unset($alias){
       unset(self::$objects[$alias]);
   }
}

Register::set('rand',RandFactory::factory());

$object=Register::get('rand');

print_r($object);
相关文章
相关标签/搜索