(1) Enquanto a pessoa não desistir de si mesma, o mundo inteiro não desistirá de você.
(2) Eu nasci para ser útil . (3) Se não
posso suportar o sofrimento do aprendizado, devo suportar o sofrimento da vida. Como é doloroso Compreensão profunda.
(4) Você deve ganhar fazendo coisas difíceis . (
5) O espírito é a verdadeira lâmina.
(6) Derrotar oponentes duas vezes, a primeira no coração.
(7) Escrever não é realmente fácil. Se você gosta ou tem algo para você Ajude a lembrar de curtir + seguir ou favorito ~
Análise profunda do padrão de estratégia Java SE 051 e sua aplicação na estrutura de coleta
Artigo Diretório
1. Padrão de estratégia (padrão de estratégia)
O modo de estratégia incorpora dois princípios básicos de design orientado a objetos
(1)
Explicação conceitual das mudanças de encapsulamento : TreeSet ou TreeMap só sabe aceitar um tipo de Comparador, mas a classe de implementação específica é passada por nós Eu não sabia disso antes, ele só conhecia uma interface como o Comparator. Portanto, podemos implementar uma interface como Comparator por nós mesmos e, em seguida, encapsulá-la em nossas próprias regras de comparação, ou seja, realizar nossas próprias alterações.
(2) As interfaces são usadas na programação, não na realização
de interfaces. Programação orientada à interface
2. Definição do modo de estratégia
Defina um conjunto de algoritmos, encapsule cada algoritmo e torne-os intercambiáveis.
O modo de estratégia permite que esses algoritmos mudem sem afetar uns aos outros quando o cliente os chama.
3. A importância do modelo de estratégia
O modo de estratégia permite que os desenvolvedores desenvolvam software composto de muitas peças substituíveis, e o relacionamento entre cada parte é fraco.
Explicação: Há uma conexão fraca entre TreeSet e Comparator e também uma conexão fraca entre cada classe de implementação.
O recurso de conexão fraca torna o software mais escalonável e fácil de manter; mais importante, melhora muito a capacidade de reutilização do software.
4. A composição do modelo de estratégia
Função de estratégia abstrata: classe de estratégia, geralmente implementada por uma interface ou classe abstrata.
Função de estratégia específica: empacota algoritmos e comportamentos específicos Função
ambiental: contém uma referência a uma classe de estratégia e é finalmente chamada pelo cliente. TreeSet ou TreeMap
5. Implementação do modo de estratégia
O padrão de estratégia é para um conjunto de algoritmos, encapsulando cada algoritmo em uma classe independente com uma interface comum, de modo que eles possam ser substituídos entre si.
O modo de estratégia permite que o algoritmo mude sem afetar o cliente. Usar o modelo de estratégia pode separar comportamento e ambiente.
A classe de ambiente é responsável por manter e consultar a classe de comportamento, e vários algoritmos são fornecidos em estratégias específicas. Como o algoritmo e o ambiente são independentes, a modificação do algoritmo não afetará o ambiente e o cliente.
6. As etapas de escrita do padrão de estratégia
As etapas de escrita do padrão de estratégia:
(1) Definir uma interface pública para o objeto de estratégia.
(2) Escreva uma classe de estratégia que implemente a interface pública acima.
(3) Salve uma referência ao objeto de estratégia na classe que usa o objeto de estratégia.
(4) Na classe que usa o objeto de estratégia, implemente os métodos set e get (injeção) do objeto de estratégia ou use o construtor para atribuir valores.
7. Exemplos
package com.javase.strategy;
/**
* 抽象策略类
* @author x_xiongjie
*
*/
public interface Strategy{
public int calculate(int a,int b);
}
package com.javase.strategy;
/**
* 加法策略
* @author x_xiongjie
*
*/
public class AddStrategy implements Strategy {
@Override
public int calculate(int a, int b) {
return a+b;
}
}
package com.javase.strategy;
/**
* 具体策略
* @author x_xiongjie
*
*/
public class DivideStrategy implements Strategy {
@Override
public int calculate(int a, int b) {
return a / b;
}
}
package com.javase.strategy;
/**
* 具体策略
* @author x_xiongjie
*
*/
public class MultiplyStrategy implements Strategy {
@Override
public int calculate(int a, int b) {
return a*b;
}
}
package com.javase.strategy;
/**
* 具体策略
* @author x_xiongjie
*
*/
public class SubtractStrategy implements Strategy {
@Override
public int calculate(int a, int b) {
return a-b;
}
}
package com.javase.strategy;
/**
* 环境角色
* @author x_xiongjie
*
*/
public class Environment {
private Strategy strategy;
public Environment(Strategy strategy){
this.strategy = strategy;
}
public void setStrategy(Strategy strategy){
this.strategy = strategy;
}
public Strategy getStrategy(){
return strategy;
}
/**
* strategy 外部传什么我就用什么
* @param a
* @param b
* @return
*/
public int caclulate(int a,int b){
return this.strategy.calculate(a, b);
}
}
public class Client {
public static void main(String[] args) {
AddStrategy addStrategy = new AddStrategy();
Environment environment = new Environment(addStrategy);
int value = environment.caclulate(170, 120);
System.out.println(value);
SubtractStrategy subtractStrategy = new SubtractStrategy();
environment.setStrategy(subtractStrategy);
int value1 = environment.caclulate(170, 120);
System.out.println(value1);
MultiplyStrategy multiplyStrategy = new MultiplyStrategy();
environment.setStrategy(multiplyStrategy);
int value2 = environment.caclulate(170, 120);
System.out.println(value2);
DivideStrategy divideStrategy = new DivideStrategy();
environment.setStrategy(divideStrategy);
int value3 = environment.caclulate(170, 120);
System.out.println(value3);
}
}
8. Desvantagens do Modo Estratégia
(1) O cliente deve conhecer todas as classes de estratégia e decidir qual classe de estratégia usar.
(2) Crie muitas classes de estratégia.
Solução:
adote o método de fábrica