Patrón de diseño --- Patrón de estrategia

1 Definición

El patrón de la estrategia es reunir un grupo de algoritmos con el mismo propósito y diferentes métodos de implementación, para que puedan reemplazarse entre sí y los cambios del algoritmo no afecten a los clientes que usan el algoritmo. El patrón de estrategia pertenece al patrón de comportamiento del objeto, encapsula el algoritmo, separa la responsabilidad de usar el algoritmo de la implementación del algoritmo y delega la gestión de estos algoritmos a diferentes objetos.

2 ventajas 

1. Las sentencias condicionales múltiples no son fáciles de mantener, y el uso del patrón de estrategia puede evitar el uso de sentencias condicionales múltiples, como sentencias if... else, switch... case.

2. El patrón de estrategia proporciona una serie de familias de algoritmos reutilizables. El uso adecuado de la herencia puede transferir el código común de la familia de algoritmos a la clase principal, evitando así la duplicación de código.

3. El modo de estrategia puede proporcionar diferentes implementaciones del mismo comportamiento, y los clientes pueden elegir diferentes según los diferentes requisitos de tiempo o espacio.

4. El modo de estrategia proporciona un soporte perfecto para el principio abierto-cerrado y puede agregar nuevos algoritmos de manera flexible sin modificar el código original.

5. El modo de estrategia coloca el uso del algoritmo en la clase de entorno y mueve la implementación del algoritmo a la clase de estrategia concreta, dándose cuenta de la separación de los dos.

6. El patrón de estrategia combinado con el patrón de fábrica puede reducir el acoplamiento entre la clase de cliente y la abstracción del algoritmo.

3 ejemplos para explicar

Dependiendo del clima, puede haber diferentes estrategias para ir a trabajar cada día. Hace sol, vaya en bicicleta al trabajo, llueva, vaya en metro al trabajo, haga viento, maneje al trabajo, nieve, camine al trabajo. El cliente elige diferentes estrategias de trabajo según las condiciones climáticas.

4 Diagrama de clases UML

5 Código de ejemplo

5.1 Interfaz WayToWorkStrategy

public interface WayToWorkStrategy {

    /**
     * 如何去上班
     * @return 上班方式
     */
    String chooseWayToWork();
}

 5.2 Ciclovía

public class BicycleWay implements WayToWorkStrategy{

    @Override
    public String chooseWayToWork() {
       return "骑自行车去上班";
    }
}

5.3 coche CarWay

public class CarWay implements WayToWorkStrategy{

    @Override
    public String chooseWayToWork() {
        return "开车去上班";
    }
}

5.4 Subterráneo

public class SubwayWay implements WayToWorkStrategy{

    @Override
    public String chooseWayToWork() {
       return "坐地铁去上班";
    }
}

5.5 Pasarela

public class WalkWay implements WayToWorkStrategy{

    @Override
    public String chooseWayToWork() {
        return "走路去上班";
    }
}

5.6 Referencias a objetos de estrategia ContextStrategy

public class ContextStrategy {
    private String climate;
    WayToWorkStrategy wayToWorkStrategy;
    public ContextStrategy(String climate){
        this.climate = climate;
        this.wayToWorkStrategy = chooseContextStrategy();
    }

    private WayToWorkStrategy chooseContextStrategy(){
        //简单工厂模式
        switch (climate) {
            case "sun":
                return new BicycleWay();
            case "rain":
                return new SubwayWay();
            case "wind":
                return new CarWay();
            case "snow":
                return new WalkWay();
            default:
               return null;
        }
    }

    /**
     * 获取上班策略
     * @return 上班策略
     */
    public String showWayToWork(){
        if (wayToWorkStrategy == null){
            return "天气不符合要求,无法上班,好开心";
        }
        return wayToWorkStrategy.chooseWayToWork();
    }
}

5.7 Función principal MainClass

public class MainClass {
    public static void main(String[] args) {
        boolean flag = true;
        while (flag) {
            //模拟天气参数
            Scanner sc = new Scanner(System.in);
            String climate = sc.nextLine();
            if (climate.equals("exit")) {
                flag = false;
            } else {
                ContextStrategy strategy = new ContextStrategy(climate);
                System.out.println(strategy.showWayToWork());
            }
        }
    }
}

5.8 Resultados de ejecución

6 citas

1. "Patrones de diseño Dahua"

2. Explicación detallada del patrón de estrategia (patrón de diseño de estrategia) 

7 código fuente

https://github.com/airhonor/design-pattern-learning/tree/main/src/com/hz/design/pattern/strategy

Supongo que te gusta

Origin blog.csdn.net/honor_zhang/article/details/120078247
Recomendado
Clasificación