注册树模式固然也叫注册模式,注册器模式。数组
顾名思义,注册器模式就是将对象注册到全局树上,那么他就能够被任意地方访问。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);