Análise profunda do padrão de estratégia Java SE 051 e sua aplicação na estrutura de coleta

(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

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
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/xiogjie_67/article/details/108540854
Recomendado
Clasificación