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);
相關文章
相關標籤/搜索