State Pattern (padrão de desenho): Difference between revisions
From Wiki**3
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 14: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:
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).
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(); } }