Logo Studenta

Qué es el patrón de diseño State y cuándo se utiliza en PHP

¡Estudia con miles de materiales!

Vista previa del material en texto

¿Qué es el patrón de diseño State y cuándo se utiliza en PHP? 
 
El patrón de diseño "State" (Estado) es un patrón de diseño de comportamiento que permite que un 
objeto cambie su comportamiento cuando su estado interno cambia. Este patrón permite que un 
objeto altere su comportamiento sin cambiar su clase, lo que lo hace útil cuando el comportamiento 
de un objeto depende del estado en el que se encuentra. 
 
En el patrón de diseño State, el objeto tiene un conjunto de estados y una referencia a un objeto de 
estado concreto. Cuando el objeto cambia de estado, cambia su referencia al objeto de estado 
actual, lo que afecta su comportamiento. 
 
El patrón State se utiliza en situaciones en las que un objeto tiene un comportamiento que varía 
según su estado interno, y se necesita evitar la proliferación de condicionales que verifican el estado 
actual del objeto. 
 
En PHP, el patrón State se puede implementar de la siguiente manera: 
 
1. Define una interfaz para los estados concretos: 
 
```php 
interface State 
{ 
 public function handle(): void; 
} 
``` 
 
2. Implementa clases concretas para cada estado: 
 
```php 
class ConcreteStateA implements State 
{ 
 public function handle(): void 
 { 
 echo "Handle by ConcreteStateA" . PHP_EOL; 
 } 
} 
 
class ConcreteStateB implements State 
{ 
 public function handle(): void 
 { 
 echo "Handle by ConcreteStateB" . PHP_EOL; 
 } 
} 
``` 
 
3. Implementa la clase Context que contiene una referencia al estado actual y maneja la transición 
entre estados: 
 
```php 
class Context 
{ 
 private $state; 
 
 public function __construct(State $state) 
 { 
 $this->state = $state; 
 } 
 
 public function setState(State $state): void 
 { 
 $this->state = $state; 
 } 
 
 public function request(): void 
 { 
 $this->state->handle(); 
 } 
} 
``` 
 
En este ejemplo, `State` es la interfaz que define el método `handle()`, que representa el 
comportamiento del objeto para cada estado concreto. Luego, tenemos dos clases concretas 
`ConcreteStateA` y `ConcreteStateB` que implementan la interfaz `State`. 
 
La clase `Context` representa el objeto que tiene un comportamiento que varía según el estado. La 
clase `Context` contiene una referencia al estado actual y el método `request()` que invoca el 
comportamiento del estado actual a través del método `handle()`. 
 
El patrón State permite agregar nuevos estados y cambiar el comportamiento del objeto de manera 
más sencilla, ya que no hay condicionales que verifiquen el estado actual en el código cliente. En 
lugar de eso, el código cliente solo interactúa con el contexto, que maneja internamente los cambios 
de estado y su comportamiento asociado. Esto mejora la legibilidad y mantenibilidad del código al 
separar el comportamiento condicional del objeto en clases concretas de estado.

Continuar navegando