PHP设计模式_注册树模式
2021-05-03 14:26
标签:creat 需要 jin pre 模式 使用 局限 工厂 instance 通过注册树模式可以更加简单快捷的获取对象,在某个地方实例化了一个对象,可以将这个对象“保存”起来(放入可以全局使用的数组里),用的时候只需要提供 保存对象的时候 的那个标识即可,解决全局共享和交换对象,直接从该数组上获取即可。 为什么要采用注册树模式? 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。 首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。 每次创建实例对象都要存在这么一层判断。 工厂模式更多考虑的是扩展维护的问题。 总的来说,单例模式和工厂模式可以产生更加合理的对象。怎么方便调用这些对象呢?而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因而,注册树模式应运而生。不管你是通过单例模式还是工厂模式还是二者结合生成的对象,都统统给我“插到”注册树上。 PHP设计模式_注册树模式 标签:creat 需要 jin pre 模式 使用 局限 工厂 instance 原文地址:https://www.cnblogs.com/zh718594493/p/12122071.html //单例模式
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);
下一篇:常见HTTP状态码