[RESOLVIDO] Diferença - entre o padrão de projeto State e Strategy!

7 respostas
C

Seguinte galera, estou estudando todos os design patterns do GOF, porém cheguei no Strategy e percebi que a implementação desse padrão é idêntico ao State, porém nos materiais que tenho falam que a diferença esta na intenção…como não achei nada que me explicasse isso…peço a alguém que manja bem do assunto para me explicar de uma forma bem simples essa diferença.

Agradeço desde já!

7 Respostas

wescleyfcosta

No livro do head first tem até uma "conversa"entre os dois kkkk como sempre um falando que foi copiado pelo outro…

mas pelo o que eu entendi, o strategy deixa para que o cliente da classe mude o comportamento através de um novo algoritimo, enquanto no state essa mudança é feita de acordo com o estado do cliente…

C

wescleyfcosta:
No livro do head first tem até uma "conversa"entre os dois kkkk como sempre um falando que foi copiado pelo outro…

mas pelo o que eu entendi, o strategy deixa para que o cliente da classe mude o comportamento através de um novo algoritimo, enquanto no state essa mudança é feita de acordo com o estado do cliente…

hahahaha…é verdade, to lendo isso agora…mas está um pouco complicado ainda…vou continuar tentando aqui!

C

capivetta:
wescleyfcosta:
No livro do head first tem até uma "conversa"entre os dois kkkk como sempre um falando que foi copiado pelo outro…

mas pelo o que eu entendi, o strategy deixa para que o cliente da classe mude o comportamento através de um novo algoritimo, enquanto no state essa mudança é feita de acordo com o estado do cliente…

hahahaha…é verdade, to lendo isso agora…mas está um pouco complicado ainda…vou continuar tentando aqui!

Então Wescley…refleti um pouco sobre o que vc falou e também pelo o que eu estudei e então conclui o seguinte: No padrão State, os objetos das subclasses podem alterar o estado, ou seja, o StateA está executando seu método e no final deste mesmo método muda o estado para StateB( stateContext.setState(new StateB)).

Já no caso do Strategy, a responsabilidade da mudança do estado fica a critério do cliente, ou seja, ele que escolha qual subclasse vai chamar o método(mudando o estado)! a partir de algum algoritmo(por exemplo um IF qualquer!)

É MAIS OU MESMO ISSO CARA???

wescleyfcosta

capivetta:
capivetta:
wescleyfcosta:
No livro do head first tem até uma "conversa"entre os dois kkkk como sempre um falando que foi copiado pelo outro…

mas pelo o que eu entendi, o strategy deixa para que o cliente da classe mude o comportamento através de um novo algoritimo, enquanto no state essa mudança é feita de acordo com o estado do cliente…

hahahaha…é verdade, to lendo isso agora…mas está um pouco complicado ainda…vou continuar tentando aqui!

Então Wescley…refleti um pouco sobre o que vc falou e também pelo o que eu estudei e então conclui o seguinte: No padrão State, os objetos das subclasses podem alterar o estado, ou seja, o StateA está executando seu método e no final deste mesmo método muda o estado para StateB( stateContext.setState(new StateB)).

Já no caso do Strategy, a responsabilidade da mudança do estado fica a critério do cliente, ou seja, ele que escolha qual subclasse vai chamar o método(mudando o estado)! a partir de algum algoritmo(por exemplo um IF qualquer!)

É MAIS OU MESMO ISSO CARA???

Foi assim que entendi tb :stuck_out_tongue:

Rubem_Azenha

Eu também penso assim, os dois servem pra mais ou menos a mesma coisa e ja vi muita vezes Strategy sendo usado onde poderia ser usado State. Acho que nao tem tanto problema confundir e usar um no lugar do outro.

Alias, uma das coisas mais legais é usar Enum do Java com métodos pra implementar State de forma totalmente transparente.

Alexandre_Saudate

Percebam que a diferença é um tanto quanto sutil: o state é usado para guardar um estado (por exemplo, numa sequencia de tratamento de determinado dado, é comum ter vários estados. Assim, o estado é alterado várias vezes). Sua implementação, por excelência, é feita usando-se enum. Já o strategy é feito para selecionar algoritmos diferentes de tratamento de dados. Ou seja, não é esperado que sua implementação mude muito numa mesma sequencia de tratamento. Sem contar que a implementação, por excelência, é feita usando-se uma interface.

[]´s

C

Galera…então parece que sanei minha dúvida…agradeço a todos pela contribuição…até mais!

Criado 13 de agosto de 2010
Ultima resposta 13 de ago. de 2010
Respostas 7
Participantes 4