Skip to content

Instantly share code, notes, and snippets.

@HenriqueNas
Created August 16, 2024 18:28
Show Gist options
  • Save HenriqueNas/3317339a88e433fc8c940d2aa0c5b464 to your computer and use it in GitHub Desktop.
Save HenriqueNas/3317339a88e433fc8c940d2aa0c5b464 to your computer and use it in GitHub Desktop.
STATE Design Pattern in Dart
void main() {
final porta = Porta(PortaAberta());
print(porta.estado);
porta.fechar();
print(porta.estado);
porta.trancar();
print(porta.estado);
porta.abrir();
print(porta.estado);
porta.destrancar();
print(porta.estado);
}
class Porta {
Porta(this.estado);
EstadoPorta estado;
void abrir() {
estado = estado.abrir();
}
void destrancar() {
estado = estado.destrancar();
}
void trancar() {
estado = estado.trancar();
}
void fechar() {
estado = estado.fechar();
}
}
abstract class EstadoPorta {
EstadoPorta abrir();
EstadoPorta fechar();
EstadoPorta trancar();
EstadoPorta destrancar();
@override
String toString();
}
class PortaAberta extends EstadoPorta {
@override
EstadoPorta abrir() {
print('A porta já está aberta.');
return this;
}
@override
EstadoPorta destrancar() {
print('A porta já está aberta e não precisa ser destrancada.');
return this;
}
@override
EstadoPorta fechar() {
print('Fechando a porta... nhec..');
return PortaFechada();
}
@override
EstadoPorta trancar() {
print('Você não pode trancar uma porta aberta.');
return this;
}
@override
String toString() => 'Porta está Aberta';
}
class PortaFechada extends EstadoPorta {
@override
EstadoPorta abrir() {
print('Abrindo a porta...');
return PortaAberta();
}
@override
EstadoPorta destrancar() {
print('A porta está fechada, mas não trancada.');
return this;
}
@override
EstadoPorta fechar() {
print('A porta já está fechada.');
return this;
}
@override
EstadoPorta trancar() {
print('Trancando a porta...');
return PortaTrancada();
}
@override
String toString() => 'Porta está Fechada';
}
class PortaTrancada extends EstadoPorta {
@override
EstadoPorta abrir() {
print('A porta está trancada! Não pode ser aberta.');
return this;
}
@override
EstadoPorta destrancar() {
print('Destrancando a porta...');
return PortaFechada();
}
@override
EstadoPorta fechar() {
print('A porta já está fechada e trancada.');
return this;
}
@override
EstadoPorta trancar() {
print('A porta já está trancada.');
return this;
}
@override
String toString() => 'Porta está Trancada';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment