Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Qual o melhor pattern para executar uma ação quando uma tecla é pressionada?

Quando eu fazia joguinhos era comum ter um switch-case ou uma série de if-elses para fazer alguma coisa quando aperta uma tecla. Assim,

se apertou x faz algo, se não, se apertou y, então faz algo, mas se apertou espaço então faz outra, mas agora se apertou enter faz uma nova coisa, e assim por diante.

Em C/C++ eu faria uns hacks envolvendo um array de 256 posições nulas e aproveitaria o fato de uma tecla ser um número tbm e assim bastaria usar a própria tecla como índice e executar o que tiver lá.. if(objPointer = keysHandler[keyValue]) objPointer->execute();

Mas em Java como eu faria o mesmo de maneira menos 'hack'? ou seja, de maneira mais elegante?

3 respostas

Acredito que com o padrão Strategy vc faria isso.

O Strategy como apresentado no curso, consiste de pegar os algoritmos usados para cada imposto, encapsular em uma implementação e criar uma interface comum a todas implementações. Imposto e as implementações Impost1, Imposto2, ImpostN. Daí quando precisa calcular um imposto faz uso de polimorfismo calcula(new Imposto1()) ou calcula(new ImpostoN).

No cenário das teclas seria:

interface KeyPressedAction

então

KeyPressedArrowDownAction implements KeyPressedAction KeyPressedArrowUpAction implements KeyPressedAction etc..

dai teria um

doAction(new KeyPressedArrowUpAction)

O problema é que eu ainda ia ter que fazer um if pra descobrir qual ação chamar! O strategy se aplica quando se sabe qual implementação quer usar, ele apenas facilita a troca ou a adição de ações. Daí o strategy com certeza pode fazer parte da solução, mas precisa de alguma coisa junto pra selecionar qual ação chamar sem usar ifs.

doAction(new chooseStrategyWithouIf)

sugestões?

solução!

Oi,

Acho que os patterns Command e Observer seriam os mais apropriados para esse caso.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software