Strategy é um padrão de design comportamental que permite definir uma família de algoritmos, colocar cada um deles em uma classe separada e tornar seus objetos intercambiáveis, visando diminuir o acoplamento entre classes bases de classes derivadas. Com ele podemos trocar algoritmos usados dentro de um objeto em tempo de execução, isolar os detalhes de implementação de um algoritmo do código que o utiliza, substituir herança por composição e introduzir novas estratégias sem precisar alterar o contexto. Mas, uma desvantagem seria complicar demais o programa com novas classes e interfaces que acompanham o padrão, se sua aplicação possuir poucos algoritmos.
Chain of Responsability também é um padrão de design comportamental, mas que permite passar solicitações ao longo de uma cadeia de manipuladores permitindo ao evento gerado por um objeto ser tratado por outro visando controlar a ordem de tratamento de solicitações, desacoplar classes que invocam operações de classes que executam operações ou mesmo, introduzir novos manipuladores no aplicativo sem quebrar o código do cliente existente. O inconveniente é que alguns pedidos podem acabar sem tratamento.