Modo de diseño 14: Modo de Estrategia (Estrategia)

En la vida real, a menudo se encuentra en presencia de una variedad de estrategias para lograr un determinado objetivo de elegir, por ejemplo, los viajeros pueden viajar en avión, tren, bicicleta o iniciar sus propios coches privados, supermercados pueden impedir el uso de los descuentos promocionales, la entrega de los bienes enviar integración y otros métodos.

En el desarrollo de software a menudo se encuentra una situación similar, cuando existen múltiples algoritmos o estrategias para lograr una determinada función, podemos realizar la función de las diferentes opciones, dependiendo de las condiciones ambientales o algoritmo o estrategia, como los datos de clasificación estrategias de burbuja clasificación, ordenación por selección, ordenación por inserción, clasificación binaria.

Si utiliza la declaración múltiple salto condicional para lograr (que está codificado), no sólo las sentencias condicionales se vuelven muy complejas, y añadir, eliminar o reemplazar algoritmo para modificar el código fuente, fácil de mantener, en contra del principio de apertura y cierre. Si un patrón puede ser una buena estrategia para resolver el problema.

La definición y las características del patrón de estrategia

estrategia definida de modo (Estrategia): Este modo define un conjunto de algoritmos y encapsula cada algoritmo, de modo que puedan reemplazarse entre sí, y el cambio de algoritmo no afecta a los clientes que utilizan algoritmos. patrón de estrategia pertenecen a los patrones de comportamiento objeto, se encapsula por el algoritmo, el algoritmo de la responsabilidad y el uso de algoritmos separados y asignados a diferentes objetos para administrar estos algoritmos.

La ventaja principal de la estrategia de patrón como sigue.

  1. sentencia condicional múltiple no es fácil de mantener y utilizar el patrón de estrategia para evitar el uso de instrucciones condicionales múltiples.
  2. ofertas patrón de estrategia de una gama de familia de algoritmos disponibles para su reutilización, el uso adecuado del algoritmo puede heredar la familia de código común transferidos a la clase padre, de manera que se evite la duplicación de código.
  3. Modo de estrategia puede proporcionar diferentes implementaciones del mismo comportamiento, el cliente puede elegir un momento diferente o un diferentes necesidades de espacio.
  4. el modo de estrategia proporciona soporte perfecto para el principio de apertura y cierre, que puede ser sin modificar el código original, añade nuevos algoritmos flexibles.
  5. patrón de estrategia usando el algoritmo en la clase medio ambiente, y el algoritmo se mueve a estrategias específicas de clase para lograr una separación de los dos.


El principal inconveniente de la siguiente manera.

  1. El cliente debe entender la diferencia entre todos los algoritmos de políticas, con el fin de seleccionar la clase oportuna algoritmo apropiado.
  2. patrón de estrategia causa mucha categoría estrategia.

Estructura e implementación del patrón de estrategia

patrón de estrategia es preparar un conjunto de algoritmos, y el conjunto de paquetes a una serie de algoritmos que la clase política como una subclase de la política de clase abstracta. El enfoque de modo de estrategia no es la forma de aplicar el algoritmo, pero la forma de organizar estos algoritmos, por lo que la estructura del programa más flexible y tiene una mejor capacidad de mantenimiento y extensibilidad, y ahora tenemos que analizar la estructura y la implementación básica.

1. Estructura Modelo

El papel principal del patrón de estrategia de la siguiente manera.

  1. Resumen de la estrategia (Estrategia) categoría: define una interfaz común para una variedad de diferentes algoritmos de diferentes maneras esta interfaz, el papel del medio ambiente mediante la interfaz diferente llama a este algoritmo, interfaz de uso común o implementos clase abstracta.
  2. Las estrategias específicas (hormigón Estrategia) Categoría: estrategia abstracta para lograr las interfaces definidas, proporcionan algoritmo específico.
  3. Las referencias tienen una clase política, y en última instancia a las llamadas del cliente: Clase de Medio Ambiente (Contexto).


La estructura mostrada en la Figura 1.
 

                                Modo Estrategia organizador gráfico
 

2. Modo de realización

Estrategia código de implementación patrón de la siguiente manera:

package strategy;
public class StrategyPattern
{
    public static void main(String[] args)
    {
        Context c=new Context();
        Strategy s=new ConcreteStrategyA();
        c.setStrategy(s);
        c.strategyMethod();
        System.out.println("-----------------");
        s=new ConcreteStrategyB();
        c.setStrategy(s);
        c.strategyMethod();
    }
}
//抽象策略类
interface Strategy
{   
    public void strategyMethod();    //策略方法
}
//具体策略类A
class ConcreteStrategyA implements Strategy
{
    public void strategyMethod()
    {
        System.out.println("具体策略A的策略方法被访问!");
    }
}
//具体策略类B
class ConcreteStrategyB implements Strategy
{
  public void strategyMethod()
  {
      System.out.println("具体策略B的策略方法被访问!");
  }
}
//环境类
class Context
{
    private Strategy strategy;
    public Strategy getStrategy()
    {
        return strategy;
    }
    public void setStrategy(Strategy strategy)
    {
        this.strategy=strategy;
    }
    public void strategyMethod()
    {
        strategy.strategyMethod();
    }
}

Los resultados del programa son los siguientes:  

具体策略A的策略方法被访问!
-----------------
具体策略B的策略方法被访问!

 

Ejemplos de aplicación del patrón de estrategia

[Ejemplo 1] Modo de Estrategia de Aplicación "peludo" en la cocción.

Análisis: Con respecto a la práctica de cangrejos hay muchos, que al vapor cangrejos y cangrejo estofado de dos métodos, por ejemplo, describe la aplicación del patrón de estrategia.

En primer lugar, la definición abstracta de un cangrejo procesamiento de Estrategia (CrabCooking), que contiene un resumen de un método de cocinar CookingMethod (); entonces, definir los cangrejos al vapor (SteamedCrabs) y cangrejos estofado (BraisedCrabs) clase política específica, que implementa el extracto método de política clase abstracta; figura bien como resultado del presente procedimiento que se muestra, la definición de clase política en un hormigón subclase JLabel; último, la definición de una clase ambiente de la cocina (cocina), y que tiene un conjunto de políticas de selección cocinar método; política de clase de cliente mediante la obtención de cocina clase de cocina, cocinar y los resultados que se muestran en forma de la figura, la figura 2 es un diagrama de configuración de la figura.
 

           Estructura La figura política de cangrejos de cocina

Código es el siguiente:

package strategy;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CrabCookingStrategy implements ItemListener
{
    private JFrame f;
    private JRadioButton qz,hs;
    private JPanel CenterJP,SouthJP;
    private Kitchen cf;    //厨房
    private CrabCooking qzx,hsx;    //大闸蟹加工者   
    CrabCookingStrategy()
    {
        f=new JFrame("策略模式在大闸蟹做菜中的应用");
        f.setBounds(100,100,500,400);
        f.setVisible(true);       
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        SouthJP=new JPanel();
        CenterJP=new JPanel();
        f.add("South",SouthJP);
        f.add("Center",CenterJP);
        qz=new JRadioButton("清蒸大闸蟹");
        hs=new JRadioButton("红烧大闸蟹");
        qz.addItemListener(this);
        hs.addItemListener(this);
        ButtonGroup group=new ButtonGroup();
        group.add(qz);
        group.add(hs);
        SouthJP.add(qz);
        SouthJP.add(hs);
        //---------------------------------
        cf=new Kitchen();    //厨房
        qzx=new SteamedCrabs();    //清蒸大闸蟹类
        hsx=new BraisedCrabs();    //红烧大闸蟹类
    }
    public void itemStateChanged(ItemEvent e)
    {
        JRadioButton jc=(JRadioButton) e.getSource();
        if(jc==qz)
        {
            cf.setStrategy(qzx);
            cf.CookingMethod(); //清蒸
        }
        else if(jc==hs)
        {
            cf.setStrategy(hsx);
            cf.CookingMethod(); //红烧
        }
        CenterJP.removeAll();
        CenterJP.repaint();
        CenterJP.add((Component)cf.getStrategy());       
        f.setVisible(true);
    }
    public static void main(String[] args)
    {       
        new CrabCookingStrategy();
    }
}
//抽象策略类:大闸蟹加工类
interface CrabCooking
{
    public void CookingMethod();    //做菜方法
}
//具体策略类:清蒸大闸蟹
class SteamedCrabs extends JLabel implements CrabCooking
{
    private static final long serialVersionUID=1L;
    public void CookingMethod()
    {
          this.setIcon(new ImageIcon("src/strategy/SteamedCrabs.jpg"));
          this.setHorizontalAlignment(CENTER);
    }
}
//具体策略类:红烧大闸蟹
class BraisedCrabs extends JLabel implements CrabCooking
{
    private static final long serialVersionUID=1L;
    public void CookingMethod()
    {
        this.setIcon(new ImageIcon("src/strategy/BraisedCrabs.jpg"));
        this.setHorizontalAlignment(CENTER);
    }
}
//环境类:厨房
class Kitchen
{
    private CrabCooking strategy;    //抽象策略
    public void setStrategy(CrabCooking strategy)
    {
        this.strategy=strategy;
    }
    public CrabCooking getStrategy()
    {
        return strategy;
    }
    public void CookingMethod()
    {
        strategy.CookingMethod();    //做菜   
    }
}

                              å¤§é¸è¹åèç »æ 

[Ejemplo 2] aplicado el modo de política de viajes Shaoguan a viajes Wuyuan.

Análisis: de Shaoguan a Wuyuan turismo de varias maneras: en tren, en autobús y en coche, por lo que el ejemplo con el modo de política es más conveniente, como se muestra en la Figura 4 es su estructura.
 

                turismo Wuyuan diagrama de estructura
 

el modo de estrategia de escenarios de aplicación

el modo de estrategia se utiliza en muchos lugares, tales como  Java  diseño de contenedores en la dirección SE es un ejemplo típico, Java SE en cada contenedor allí para que el usuario seleccione varios diseños. En la programación, el patrón de estrategia usada más comúnmente en los siguientes casos.

  1. Un sistema tiene que seleccionar dinámicamente uno de varios algoritmos en el tiempo, puede ser empaquetado en cada clase política algoritmo.
  2. Una clase define un número de comportamiento y estos comportamientos en la forma de una pluralidad de sentencias condicionales en el funcionamiento de esta clase, cada rama condicional puede ser movido en su respectiva clase política en el lugar de los estados condicionales.
  3. Cada sistema algoritmo completamente independientes entre sí, y cuando los detalles de implementación ocultar al cliente de los requisitos del algoritmo específico.
  4. El sistema requiere que los clientes utilizar el algoritmo no debe saber cuando los datos en sus operaciones, patrón de estrategia se puede utilizar para ocultar los algoritmos asociados con estructuras de datos .
  5. Más de una clase única diferencia en el rendimiento de un comportamiento diferente, se puede utilizar el patrón de estrategia, el comportamiento en tiempo de ejecución de forma dinámica seleccione específica a realizar.

modo de estrategia de expansión

En un sistema que utiliza el modo de la política, cuando hay una estrategia de muchos clientes a gestionar todas las políticas algoritmo llegará a ser muy complicado, si el patrón de la fábrica de políticas en la categoría de medio ambiente para gestionar estas políticas clases se reducirá en gran medida la complejidad del trabajo del cliente , la estructura mostrada en la Figura 5.
 

             modo de fábrica gráfico Estrategia Organizador

 

Publicados 136 artículos originales · ganado elogios 6 · vistas 1548

Supongo que te gusta

Origin blog.csdn.net/weixin_42073629/article/details/104437759
Recomendado
Clasificación