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á!
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…
[quote=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…[/quote]
hahahaha…é verdade, to lendo isso agora…mas está um pouco complicado ainda…vou continuar tentando aqui!
[quote=capivetta][quote=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…[/quote]
hahahaha…é verdade, to lendo isso agora…mas está um pouco complicado ainda…vou continuar tentando aqui![/quote]
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???
[quote=capivetta][quote=capivetta][quote=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…[/quote]
hahahaha…é verdade, to lendo isso agora…mas está um pouco complicado ainda…vou continuar tentando aqui![/quote]
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??? [/quote]
Foi assim que entendi tb
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.
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
Galera…então parece que sanei minha dúvida…agradeço a todos pela contribuição…até mais!