Notas do padrão de design 23 - padrão de estratégia (estratégia)

Para escrever um projeto de pato, os requisitos específicos são os seguintes:

1) Existem vários patos (como patos selvagens, patos de Pequim, marrecos, etc. Os patos têm vários comportamentos, como chamar, voar, etc.)

2) Exibir informações de pato

 

Solução tradicional:

Todos os patos integrados do Duck

 

 

 

Análise de problemas e soluções implementadas de maneira tradicional

1) Todos os outros patos herdam a classe Duck, então fly faz com que todas as subclasses voem, o que é incorreto

2) O problema mencionado acima em 1 é na verdade um problema causado por herança: mudanças parciais em classes, especialmente mudanças em superclasses, afetarão outras partes. haverá efeitos colaterais

3) Para melhorar o problema 1, podemos resolvê-lo substituindo o método fly => overriding solution

4) Aí vem o problema novamente, se tivermos um pato de brinquedo ToyDuck, precisamos de ToyDuck para cobrir todos os métodos de implementação de Duck => modo de estratégia de solução (padrão de estratégia)

 

 

introdução básica

1) No padrão de estratégia (Strategy Pattern), defina a família de algoritmos e encapsule-os separadamente para que possam ser substituídos entre si. Este modo faz com que o algoritmo mude independente do cliente que usa o algoritmo

2) Este algoritmo incorpora vários princípios de design. Primeiro, ele separa o código que muda do código inalterado; segundo, ele tem como alvo a programação de interface em vez de classes específicas (definindo a interface de estratégia); terceiro, combinação/Agregação multiuso, menos herança ( clientes usam estratégias através da composição).

 

 

Diagrama de classe principal do padrão de estratégia

Explicação: Como pode ser visto na figura acima, o contexto do cliente tem uma estratégia de variável de membro ou outras interfaces de estratégia.Quanto à estratégia que precisa ser usada, podemos especificá-la no construtor.

 

Código principal:


No método principal:
        Duck toyDuck = new ToyDuck();
        toyDuck.fly();

Ao chamar o método fly():
    public void fly() {         //melhorado         if(flyBehavior != null) {             flyBehavior.fly();         }     }
        





 

O flyBehavior encapsula uma estratégia de voo específica, que é definida quando o flyBehavior é inicializado.

 

Notas e Detalhes do Padrão de Estratégia

1) A chave para o padrão de estratégia é analisar as partes mutáveis ​​e inalteradas do projeto

2) A ideia central do padrão de estratégia é: usar mais combinação/agregação e menos herança; usar combinação de classe de comportamento em vez de herança de comportamento. mais elástico

3) Incorpora o princípio de "fechado para modificação, aberto para extensão". O cliente não precisa modificar o código original para adicionar comportamento, basta adicionar uma estratégia (ou comportamento), evitando o uso de várias instruções de transferência (if. .else if. .else)

4) Fornece uma maneira de substituir o relacionamento de herança: o modo de estratégia encapsula o algoritmo em uma classe de estratégia independente para que você possa alterá-lo independentemente de seu contexto, tornando-o fácil de alternar, fácil de entender e fácil de expandir

5) Vale ressaltar que toda vez que uma estratégia é adicionada, uma classe deve ser adicionada. Quando houver muitas estratégias, o número de classes será enorme

 

 

 

 

 

 

 

 

Acho que você gosta

Origin blog.csdn.net/qq_22059611/article/details/103315214
Recomendado
Clasificación