El patrón singleton garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella, para eso restringe la creación de objetos pertenecientes a la misma clase.
La implementación de este patrón se consigue mediante la creación de un método en nuestra clase que cree una instancia del objeto únicamente si todavía no existe ninguna. Para conseguir estas restricciones se limita el alcance del constructor con el atributo “privado”.
Cuando un programa se ejecuta desde varios sitios a la vez y ambas ejecuciones intentan instanciar el objeto al mismo tiempo se produce la mayor inconsistencia, en este caso se utiliza la exclusión mutua en el constructor de la clase que implementa el patrón.
La utilización más común de este patrón es en las aplicación en las que se controla un recurso físico como puede ser un archivo abierto en modo exclusivo, o bien cuando un dato debe de estar disponible para el resto de objetos de la aplicación.
Ejemplo de utilización.
Suponemos que varios clientes distintos precisan referenciar a un mismo elemento y queremos asegurarnos de que no hay más de una instancia de ese elemento.
class MiPatronSingleton{
// Contenedor de la instancia del singleton
private static $instance;
// Un constructor privado evita la creación de un nuevo objeto
private function MiPatronSingleton()
{
echo ‘Objeto creado.’;
}
// método singleton
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// método de ejemplo
public function holamundo()
{
echo ‘Hola Mundo’;
}
// Evita que el objeto se pueda clonar
public function __clone()
{
trigger_error(‘La clonación de este objeto no está permitida’, E_USER_ERROR);
}
}
¿Cómo obtengo una instancia de la clase y cómo uso sus métodos?
$objetoMiPatronSingleton = MiPatronSingleton::singleton();
$objetoMiPatronSingleton->holamundo();
SEAS es el centro de formación online del Grupo San Valero, especializado en el ámbito técnico, industrial y de empresa. Visita www.seas.es para consultar nuestra oferta formativa de cursos y másteres. Formación profesional para el empleo de calidad y accesible para todos.