" Como se pode ver, as classes de implementação também dependem da classe de método do modelo. Essa dependência faz com que o método seja alterado, se alguém quiser alterar algumas das etapas do algoritmo. Por outro lado, a estratégia encapsula completamente o algoritmo. Ela fornece a implementação classes para definir completamente um algoritmo.Portanto, se houver alguma mudança, é necessário alterar o código das classes escritas anteriormente.Esta foi a principal razão pela qual escolhi a estratégia para projetar as classes.
Uma característica do método de modelo é que ele controla o algoritmo. O que pode ser uma coisa boa em outra situação, mas no meu problema, isso estava me restringindo a projetar as classes. Por outro lado, a estratégia não controla as etapas de um algoritmo que me permite adicionar métodos de conversão completamente diferentes. Portanto, no meu caso, a estratégia me ajuda na implementação.
Uma desvantagem da estratégia é que há muita redundância de código e menos compartilhamento de código. Como é óbvio no exemplo apresentado deste artigo, tenho que repetir o mesmo código em quatro classes várias vezes. Portanto, é difícil de manter, porque se a implementação de nosso sistema, como a etapa 4, que é comum a todos, for alterada, terei que atualizar isso nas 5 classes. Por outro lado, no método de modelo, só posso alterar a superclasse e as alterações são refletidas nas subclasses. Portanto, o método de modelo fornece uma quantidade muito baixa de redundância e alta quantidade de compartilhamento de código entre as classes.
A estratégia também permite alterar o algoritmo em tempo de execução. No método de modelo, será necessário reinicializar o objeto. Esse recurso da estratégia oferece grande flexibilidade. Do ponto de vista do design, é preciso preferir a composição do que a herança. Portanto, o uso do padrão de estratégia também se tornou a principal escolha para o desenvolvimento ".