Aproveitando o mesmo comentário que fiz no Casual Class, embora sem resposta…
Para quem já usou o Command Pattern (muitos. provavelmente), gostaria de saber se a implementação usada (basicamente aquilo que a classe Factory cria e retorna) tem sido através de interfaces ou por classes.
Tenho visto implementações através de interfaces em exemplos didáticos (por ex, o livro core J2EE Patterns), e implementacao atraves de classes (aproveitando-se a herança) em alguns frameworks (por ex. Struts - a classe org.apache.struts.action.Action).
Se alguém puder apresentar alguns impactos sofridos na prática em utilizar uma ou outra, nesse caso específico (Command Pattern)…
Depende muito da situacao. Fazer Command ser uma classe abstrata significa que voce nao podera estender nenhuma outra classe. Usando interfaces, esse problema nao ocorre.
Salvo um motivo muito especial, nao ha razao para fazer de Command uma classe abstrata se a implementacao normal somente tem um metodo “execute()”.
[quote=“Rafael Steil”]Depende muito da situacao. Fazer Command ser uma classe abstrata significa que voce nao podera estender nenhuma outra classe. Usando interfaces, esse problema nao ocorre.
[/quote]
Olá Rafael
Bom, na verdade, a unica diferença que realmente achei interessante é que, ao usar classes, pode facilitar a adicao de funcionalidades no Command, pois automaticamente as subclasses herdarao as propriedades e comportamentos, podendo significar um numero reduzido de alteracoes. É claro que para isso a SuperClasse Command não deverá ser abstrata (se vc ver o Action, do struts, ela não é abstrata).
Contornar a limitação a heranca multipla de classes simplesmente com o uso de interfaces eu nem sempre acho uma boa solução. Depende muito da situação… Ja q o proposito deles, na verdade, sao bem distintos… e pensado em fases diferentes de um projeto. (interface antes, e classes depois, mais durante a implementacao).
Bom, se vc estiver se referindo às classes adaptadoras, aí concordo!
Muitos frameworks usam o Command Pattern (webwork, struts, prevayler, OSWorkflow… a lista eh grande… :), e em todos eles da pra notar que os comandos devem implementar uma interface (Action, Command, qualquer que seja o nome dela), mas geralmente os frameworks já dão uma canja com uma classe quebra-galho que vc estende (ActionSupport, AbstractCommand), e por aih vai. Acho uma boa ideia, e simplifica bem o desenvolvimento… que tal?