El Patrón de Diseño “State” tiene como tarea principal alterar el comportamiento de un objeto cuando su estado interno cambia, por lo tanto, es útil cuando queremos tener acciones diferentes según el estado que estemos monitoreando en tiempo de ejecución.
class Context {
private var state: State
init(state: State) {
self.state = state
}
func setState(state: State) {
self.state = state
}
func processAction() {
state.action(context: self)
}
}
protocol State {
func action(context: Context)
}
class ConcreteStateA: State {
func action(context: Context) {
print(“Acciones o procesos A”)
context.setState(state: ConcreteStateB())
}
}
class ConcreteStateB: State {
func action(context: Context) {
print(“Acciones o procesos B”)
context.setState(state: ConcreteStateA())
}
}
let context = Context(state: ConcreteStateA())
context.action() // Hace acciones del context A y cambia a ConcreteState B
context.action() // Hace acciones del context B y cambia a ConcreteState A
Ventajas | Desventajas |
– Encapsulación del comportamiento del estado en una clase – Favorece el mantenimiento y la extensión del código ya que se deben realizar en sus clases correspondientes – Las acciones de cada estado son independientes – Reduce las condiciones complejas | Aumenta la cantidad de clases que representan diferentes estados y transiciones Puede existir una dependencia entre el contexto y los estados concretos Mayor cantidad de estados y transiciones lo pueden volver más complejo de implementar y entender |