Interpretación de patrones de diseño estratégico

Prefacio

En el desarrollo de software, a menudo se encuentra que existen múltiples estrategias o algoritmos para lograr una determinada función, y se pueden seleccionar diferentes algoritmos o estrategias de acuerdo con la situación real. Si estos algoritmos o estrategias se extraen, se proporciona una interfaz unificada. Los diferentes algoritmos o estrategias tienen diferentes clases de implementación. El reemplazo dinámico de algoritmos o estrategias se puede lograr inyectando diferentes objetos de implementación. Este es el modo de estrategia

definición

El patrón de estrategia define una serie de algoritmos, encapsula cada algoritmo y los hace intercambiables. El modo de estrategia permite que el algoritmo cambie independientemente de los clientes que lo utilicen

UML

Inserte la descripción de la imagen aquí

escenas que se utilizarán

  • Hay varias formas de lidiar con el mismo tipo de problema, solo el comportamiento específico es diferente
  • Cuando es necesario encapsular varias operaciones del mismo tipo de forma segura
  • Cuando hay varias subclases de la misma clase abstracta y necesita usar if-else o switch-case para seleccionar subclases específicas

Práctica

Tomemos un ejemplo del costo del transporte público urbano. Generalmente, se implementa el precio por segmento: cuanto mayor es la distancia, mayor es el precio.

// 定义一个抽象的价格计算接口
public interface CalculateStrategy{
  int calculatePrice(int km)
}

// 公交车的计算策略类
public class BusStrategy implements CalculateStrategy{
    @override
    public  int calculatePrice(int km){
         return  1 //  这里简单起见,实际按照公交车乘车规则计费
     }
}

// 地铁的计算策略类
public class SubwayStrategy implements CalculateStrategy{
    @override
    public  int calculatePrice(int km){
         return  2 //  这里简单起见,实际按照地铁乘车规则计费
     }
}

// 出行价格计算器
public class TranficCalculator{
   CalculateStrategy  mStrategy;
   public void setStrategy(CalculateStrategy  mStrategy){
       this.mStrategy=mStrategy
    }
    public int calculatePrice(int km){
       return  mStrategy.calculatePrice(km);
    }
}

public static void main(String [] args){
    TranficCalculator calculator=new  TranficCalculator ();
    // 公交车费用
     calculator.setStrategy(new BusStrategy());
   //  地铁费用
    calculator.setStrategy(new SubwayStrategy());
}

resumen

El modo de estrategia se utiliza principalmente para separar algoritmos, y existen diferentes estrategias de implementación específicas bajo la misma abstracción de comportamiento. Este modo es una buena demostración del principio de apertura y cierre, es decir, definir abstracciones e inyectar diferentes implementaciones para lograr una buena escalabilidad.

ventaja

  • El modo de estrategia proporciona una forma de administrar familias de algoritmos relacionados, y los algoritmos se pueden cambiar
  • Evite el uso de varias declaraciones de bifurcaciones condicionales

Desventaja

  • El cliente conoce todas las clases de estrategia y decide qué clase de estrategia utilizar. La clase de estrategia está completamente expuesta
  • A veces hay muchas clases de estrategia.

Supongo que te gusta

Origin blog.csdn.net/xufei5789651/article/details/100593144
Recomendado
Clasificación