Logo Studenta

Qué es el patrón de diseño Singleton en el contexto de Lara

¡Estudia con miles de materiales!

Vista previa del material en texto

¿Qué es el patrón de diseño Singleton en el contexto de Laravel y cómo se implementa? 
 
En el contexto de Laravel, el patrón de diseño Singleton es una forma de asegurarse de que una 
clase tenga una única instancia en toda la vida del ciclo de vida de una solicitud HTTP. Esto significa 
que cada vez que se solicita la instancia de esa clase, se devolverá siempre la misma instancia 
previamente creada. 
 
En Laravel, el patrón Singleton se puede implementar de manera sencilla utilizando el contenedor de 
servicios de Laravel (Service Container) y el concepto de "binding" (enlace) de instancias. Laravel 
utiliza un contenedor de servicios para administrar la resolución de dependencias y la creación de 
objetos. 
 
Para implementar una clase como un Singleton en Laravel, puedes realizar los siguientes pasos: 
 
1. Crear la clase que deseas implementar como Singleton. Por ejemplo: 
 
```php 
// app/SingletonExample.php 
 
class SingletonExample 
{ 
 protected static $instance; 
 
 protected function __construct() 
 { 
 // El constructor está protegido para evitar que se cree una instancia directamente 
 } 
 
 public static function getInstance() 
 { 
 if (!self::$instance) { 
 self::$instance = new self(); 
 } 
 
 return self::$instance; 
 } 
 
 // Agrega aquí tus métodos y propiedades 
} 
``` 
 
2. Registrar la clase como Singleton en el contenedor de servicios de Laravel. Puedes hacer esto en el 
archivo `AppServiceProvider.php` o crear un nuevo proveedor de servicios. 
 
```php 
// app/Providers/AppServiceProvider.php 
 
use Illuminate\Support\ServiceProvider; 
 
class AppServiceProvider extends ServiceProvider 
{ 
 public function register() 
 { 
 $this->app->singleton(SingletonExample::class, function () { 
 return SingletonExample::getInstance(); 
 }); 
 } 
} 
``` 
 
3. Una vez que hayas registrado la clase como un Singleton, puedes acceder a ella a través del 
contenedor de servicios en cualquier parte de tu aplicación: 
 
```php 
// En cualquier parte de tu aplicación, por ejemplo, en un controlador 
 
use App\SingletonExample; 
 
public function index() 
{ 
 $singletonInstance = app(SingletonExample::class); 
 // O también puedes utilizar la inyección de dependencias para obtener la instancia 
automáticamente 
 // public function index(SingletonExample $singletonInstance) 
 // { 
 // ... 
 // } 
} 
``` 
 
Ahora, cada vez que accedas a `SingletonExample` a través del contenedor de servicios, recibirás 
siempre la misma instancia en toda la solicitud HTTP. 
 
Es importante tener en cuenta que Laravel también utiliza Singleton en algunos de sus componentes 
internos, como el enrutador y el gestor de eventos. Además, debes usar el patrón Singleton con 
precaución, ya que puede dificultar la prueba unitaria y aumentar el acoplamiento en tu aplicación. 
Considera si realmente necesitas una única instancia global antes de utilizar este patrón. En muchos 
casos, la inyección de dependencias es una alternativa más recomendada para administrar la 
creación y el alcance de objetos en Laravel.

Continuar navegando