PHP设计模式之-----注册树模式

本文探讨了注册树模式的出现背景及其实现方式。为了解决单例模式和工厂模式中存在的对象管理难题,注册树模式提供了统一的对象注册和获取机制。无论对象通过何种模式创建,都可以在注册树中进行管理和调用。
<?php
/*
 * 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。  首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。 每次创建实例对象都要存在这么一层判断。 工厂模式更多考虑的是扩展维护的问题。 总的来说,单例模式和工厂模式可以产生更加合理的对象。怎么方便调用这些对象呢?而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因而,注册树模式应运而生。不管你是通过单例模式还是工厂模式还是二者结合生成的对象,都统统给我“插到”注册树上。我用某个对象的时候,直接从注册树上取一下就好。这和我们使用全局变量一样的方便实用。 而且注册树模式还为其他模式提供了一种非常好的想法。
 * */
//创建单例
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{
	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);

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值