Difference between revisions of "State Pattern (padrão de desenho)"

From Wiki**3

(Porta automática)
(Porta automática)
Line 12: Line 12:
 
A porta automática pode estar en vários estados que determinam a sua resposta a estímulos. Os vários estados são "Closed" (porta fechada); "Closing" (porta a fechar); "StayOpen" (permanentemente aberta); "Open" (aberta); "Opening" (porta a abrir). Os estímulos são "click" (botão de abrir/fechar premido); "complete" (fim do ciclo de abertura/fecho); "timeout" (passagem de tempo num dado estado).
 
A porta automática pode estar en vários estados que determinam a sua resposta a estímulos. Os vários estados são "Closed" (porta fechada); "Closing" (porta a fechar); "StayOpen" (permanentemente aberta); "Open" (aberta); "Opening" (porta a abrir). Os estímulos são "click" (botão de abrir/fechar premido); "complete" (fim do ciclo de abertura/fecho); "timeout" (passagem de tempo num dado estado).
  
[[Image:state-dp-state-diagram-door.png]]
+
[[Image:state-dp-state-diagram-door.png|500px]]
  
 
A uma aplicação de teste que simula alguns estímulos aos quais a porta deve responder.
 
A uma aplicação de teste que simula alguns estímulos aos quais a porta deve responder.

Revision as of 16:34, 29 November 2006

O padrão "state" permite que um objecto altere o seu comportamento quando o seu estado muda.

Estrutura

O padrão state tem a seguinte estrutura de classes:

State-dpcd.png

Exemplos

Porta automática

A porta automática pode estar en vários estados que determinam a sua resposta a estímulos. Os vários estados são "Closed" (porta fechada); "Closing" (porta a fechar); "StayOpen" (permanentemente aberta); "Open" (aberta); "Opening" (porta a abrir). Os estímulos são "click" (botão de abrir/fechar premido); "complete" (fim do ciclo de abertura/fecho); "timeout" (passagem de tempo num dado estado).

State-dp-state-diagram-door.png

A uma aplicação de teste que simula alguns estímulos aos quais a porta deve responder.

 public class StatePattern {
   public static void main(String[] args) {
     Door door = new Door();   // Closed
     door.click();
     door.complete();
     door.timeout();
     door.click();
     door.status();
   }
 }

Máquina de bombons