Strategy e Template Method podem ser usados juntos?

Galera, gostario de opniões sobre a arquitetura montada no diagrama em anexo. No diagram (Ver anexo) uso conceitos de desing Template Method e Strategy oque acham ??? pode ser assim mesmo …


oi,

não vejo porque não

os dois padrões tratam da extração de um comportamento, enquanto o strategy utiliza o principio de “separar o que varia do que não varia” (hot spot x frozen spot) o template method utiliza o principio de extrair um comportamento default delegando para as subclasses a implementação do comportamento específico

strategy: Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

template: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

com relação ao seu diagrama um “comportamento” acho que pode ser encarado mais como um “verbo” e não um “substantivo”, ou seja, algo como AlterarDados e nao AlteracaoDados

abs

Ok, tem razão o nome realmente não ta bom, minha duvida mesmo era com relação ao “Mix” dos dois padrões … mas obrigado pela atenção…

Att.

Sim, os dois patterns podem ser utilizados juntos.

Ao ver o seu diagrama eu pensei que para cada método criar uma classe Cartao, Avb, Veic, que extende
uma classe abstrata, e tais objetos serem criados via uma abstract factory,

e deixar apenas um metodo executeAnalysis, e em tempo de execução é passado o objeto que se deseja fazer a chamada
Cartao, Avb, Veic,

Mas essa é apenas uma sugestão, e eu não conheço o problema sendo resolvido.

Na verdade você pode misturar qualquer padrão de projetos. O proprio MVC faz isso.

Se os colegas permitem, vou dar meu pitaco…

Strategy e Template Method resolvem basicamente o mesmo problema de duas formas diferentes, respectivamente composição e herança. Para mim, Template Method tem a vantagem de ser mais simples de implementar quando você tem um único ponto de variação no algoritmo, enquanto Strategy é mais adequado quando você deseja compor comportamentos (através da aplicação do pattern Composite) ou quando há vários pontos de variação no algoritmo.

Minha heuristica é aplicar Template Method e refatorar para Strategy se o algoritmo se tornar mais complexo