Blog de Gonzalo

REGISTRY

Hace un tiempo escribí sobre el patrón de diseño singleton.
Ahora voy a escribir sobre el patrón de diseño registry.
La idea de este patrón es crear una clase donde se permita crear instancias de objetos en un array. Es decir que cualquier objeto sea utilizado como singleton sin necesidad de especificarlo directamente en su constructor. Y ésto puede resultar bastante útil cuando en un proyecto se usan varios objetos y evitar que se instancien varias veces.
Con un ejemplo quedará bastante claro:



class Registry
{
static private $registry = array();
//Se añade la instancia al array, se le pasa el nombre con el que se guardará en el array y la instancia
static public function set($name, and$item)
{
if (!self::exists($name)) {
self::$registry[$name] = $item;
return true;
} else {
return false;
}
}
static public function exists($name)
{
if (is_string($name)) {
return array_key_exists($name, self::$registry);
} else {
throw new Exception('Registry item\'s name must be a string');
}
}
static public function get($name)
{
if (self::exists($name)) {
$return = self::$registry[$name];
} else {
$return = null;
}
return $return;
} static public function remove($name)
{
if (self::exists($name)) {
unset(self::$registry[$name]);
}
return true;
}
}
$registry = new Registry();
//Se añade la clase singleton
$singleton = Singleton::getInstance();
//Se hace así pq sino da un warning al ser un parámetro por referencia
$registry->set('singleton', $singleton);
//Se añaden varias clases
...
//Se obtiene la clase singleton
$conf_db = $registry->get('singleton')->getSeccion('singleton');

El ejemplo es sencillo pero espero que se entienda.

Compartir en twitter