zoukankan      html  css  js  c++  java
  • PHP设计模式_注册树模式

    通过注册树模式可以更加简单快捷的获取对象,在某个地方实例化了一个对象,可以将这个对象“保存”起来(放入可以全局使用的数组里),用的时候只需要提供 保存对象的时候 的那个标识即可,解决全局共享和交换对象,直接从该数组上获取即可。

    为什么要采用注册树模式?

    单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。 首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。 每次创建实例对象都要存在这么一层判断。 工厂模式更多考虑的是扩展维护的问题。 总的来说,单例模式和工厂模式可以产生更加合理的对象。怎么方便调用这些对象呢?而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因而,注册树模式应运而生。不管你是通过单例模式还是工厂模式还是二者结合生成的对象,都统统给我“插到”注册树上。

    	//单例模式
    	class DataBase{
    		private static $ins;
    		public static function getInstance(){
    			if(self::$ins instanceof self){
    				return self::$ins;
    			}
    			self::$ins = new self();
    			return self::$ins;
    		}
    	}
    	//工厂模式
    	class Factory{
    		public static function createDb(){
    			$db = DataBase::getInstance();
    			Register::set("testdb",$db);
    			return $db;
    		}
    	}
    	//注册树模式
    	class Register{
    		protected static $object;
    		public static function set($name,$obj){
    			self::$object[$name]=$obj;
    		}
    		public function get($name){
    			$obj=null;
    			if(isset(self::$object[$name])){
    				$obj = self::$object[$name];
    			}
    			return $obj;
    		}
    	}
    	$objFact = new Factory();
    	$db = $objFact->createDb();
    
    	$objreg = new Register();
    	$objInfo = $objreg->get("testdb");
    	var_dump($objInfo);
    

      

  • 相关阅读:
    【剑指Offer】跳台阶&变态跳台阶
    【剑指Offer】替换空格
    【剑指Offer】二维数组中的查找
    【Leetcode】2. Add Two Numbers 两数相加
    HTML学习笔记(一)HTML的一些概念区别
    C#项目中一些文件类型说明
    数据结构初步归纳(一)概念、线性表以及队列和栈
    线程相关概念
    程序开发方法论
    C#集合类型
  • 原文地址:https://www.cnblogs.com/zh718594493/p/12122071.html
Copyright © 2011-2022 走看看