Antes de saltar a la fábrica de Joomla!, debemos tomar un momento para contemplar los patrones que se presentan en el código. Conocidos como patrones de diseño (Design Patterns), patrones que se encuentran comúnmente en el código se han estudiado durante algún tiempo y se ha aprendido mucho de ellos.
Uno de los patrones más comunes con los que estará familiarizado es el patrón iterador (Iterator pattern). Este modelo describe cómo realizar una tarea varias veces con un bucle. Joomla! utiliza numerosos patrones de diseño, muchos de los cuales son más complejos que el patrón iterador.
Para obtener una descripción completa de patrones de diseño, debería considerar leer el libro Design Patterns: Elements of Reusable Object-Oriented Software. Este libro, publicado originalmente en 1994 y escrito por the Gang of Four, es considerado como la última guía y referencia a los patrones de diseño de software.
El patrón de la fábrica (Factory) es un patrón que se utiliza para construir y devolver objetos. El patrón de la fábrica se utiliza en los casos en donde diferentes clases, por lo general derivan de una clase abstracta, son instanciadas dependiendiendo de los parámetros. Joomla! nos proporciona la clase estática JFactory, que implementa el patrón de la fábrica. Esta clase es importante porque nos permite acceder de forma sencilla a instancias de los objetos globales.
Este ejemplo muestra cómo podemos acceder a algunos de los objetos globales utilizando JFactory.
$db = &JFactory::getDBO();
$user = &JFactory::getUser();
$document = &JFactory::getDocument();
El patrón Singleton (singleton pattern) se utiliza para permitir la creación de sólo un único objeto de una clase específica. Esto se consigue haciendo el constructor privado o protegido y usando un método estático para crear instancias de la clase. En versiones de PHP anteriores a la versión 5, no podemos hacer cumplir esta restricción.
Muchas de las clases de Joomla! utilizan un modelo pseudo-singleton que nos permite crear instancias de objetos y de acceso. Para lograr esto, Joomla! a menudo utiliza un método estático llamado getInstance(); en algunos casos JFactory actúa como una interfaz a través de este método. Las clases que implementan este método no siempre están destinadas a ser clases singleton.
Podemos pensar en ellos como una jerarquía en la forma de crear instancias de objetos. Debemos utilizar estos métodos en orden de prioridad: método JFactory, método getInstance(), y el constructor normal (new).
Si no estás seguro de cómo una clase específica implementa el método getInstance (), deberás analizar el sitio oficial de referencia de la API de Joomla en http://api.joomla.org. El método getInstance() y el métodos JFactory siempre devuelven referencias, siempre utiliza el operador de asignación =& para evitar la copia de los objetos.
En los casos en donde JFactory y una clase provean un método para devolver una instancia de la clase, en general debes usar el método JFactory con preferencia. Si la clase proporciona un método getInstance() mas amplio que JFactory, puede que quieras usar el método de clase para obtener una instancia adaptados específicamente a tus necesidades.






