Comparación de patrones de diseño en C ++ de patrones simples de fábrica y patrones de estrategia

El patrón de fábrica simple debería haberse introducido en el blog del patrón de fábrica, porque hay una cierta similitud con el patrón de estrategia, que se extrae aquí en un capítulo separado.

Patrón de fábrica simple

El proceso de crear una instancia con una clase separada es la fábrica.

Codigo basico

#include <iostream> 
usando el espacio de nombres estándar; 

clase AbstractProduct {
 public : 
    virtual ~ AbstractProduct () {} 
    virtual void Operation () = 0 ; 
}; 

clase ProductA: public AbstractProduct {
 public :
     void Operation () {cout << "ProductA" << endl; } 
}; 

clase ProductB: public AbstractProduct {
 public :
     void Operation () {cout << "ProductB" << endl; } 
}; 

clase Factory {
 public: 
    AbstractProduct * createProduct ( producto char ) { 
        AbstractProduct * ap = NULL;
        switch (product) {
             case 'A': ap = new ProductA (); romper ;
            caso 'B': ap = nuevo ProductoB (); romper ; 
        } 
        return ap; 
    } 
}; 

int main () { 
    Factory * f = new Factory (); 
    AbstractProduct * apa = f-> createProduct ('A' ); 
    apa -> Operación ();  // ProductA 

    AbstractProduct * apb = f-> createProduct ('B' ); 
    apb -> Operación ();  // ProductoB 

    delete apa; 
    eliminar apb; 
    eliminar f; 

    devuelve 0 ; 
}

Fábrica de computación simple

clase OperationFactory 
{ 
public : 
    Operation createOperate ( string operating ) 
    { 
        Operation oper = null ;
        switch (operar) 
        { 
        case  " + " : 
            oper = new OperationAdd ();
            romper ;
        case  " - " : 
            oper = new OperationSub ();
            romper ;
        caso  " * ": 
            oper = new OperationMul ();
            romper ;
        case  " / " : 
            oper = new OperationDiv ();
            romper ; 
        } 
        return oper; 
    } 
};

 

Comparación de modelo de fábrica simple y modelo de estrategia

Vea este diagrama UML para recordar el patrón de estrategia que aprendí antes

Los dos parecen ser similares?

 

La única diferencia es la clase de fábrica simple y la clase de contexto.

El blog original está implementado en Java. Dado que no afecta la lectura y la comprensión, se copia directamente aquí sin modificaciones.
 
código de clase de fábrica simple y el contexto distinción de clases

clase simple de la fábrica:
 clase pública OperationFactory 
{ operación 
    estática pública  CreateOperate ( operación de cadena ) 
    { 
        Operation oper = null ;   
        switch (operar) 
        { case " + " : 
                oper = new OperationAdd ();
                romper ;
            case " - " : 
                oper = new OperationSub ();
                romper ;
            caso
               " * " : 
                oper = new OperationMul ();
                romper ;
            case  " / " : 
                oper = new OperationDiv ();
                romper ;
            predeterminado : 
                oper = new Operation ();
                romper ; 
        } 
        return oper; 
    } 
}

 

La clase de contexto en el patrón de estrategia:
Contexto de 
    clase 
{ 
    CashSuper csuper; Contexto público (CashSuper cs) 
    { 
        this .csuper = cs; 
    } 
    public  Double GetResult ( double money) 
    { 
        // Llame al método de cobro de la clase de estrategia específica 
        return csuper.acceptCash (money); 
    } 
}

 


1. Primero observe los parámetros recibidos: el método CreateOperate en la clase de fábrica simple recibe una cadena y devuelve un objeto Operation, y la clase Context necesita recibir un objeto CashSuper cuando se inicializa.
2. En la clase de fábrica simple, se crea un objeto correspondiente de acuerdo con las condiciones recibidas, mientras que la clase Context recibe un objeto, y puede llamar a métodos para ejecutar los métodos de este objeto.
Resumiendo el patrón de fábrica simple y el patrón de estrategia

1. En términos de tipos: el patrón de fábrica simple pertenece al patrón de creación y el patrón de estrategia pertenece al patrón de comportamiento.
2. Luego, mire un pequeño ejemplo:

 hay muchos tipos de hacha, hay una fábrica especializada en la producción de hachas de diversas necesidades.

    Modo de fábrica:
    1) Según el propósito que le dé para producir hachas con diferentes usos, por ejemplo, para cortar personas, entonces la fábrica produce hachas para cortar personas, y si desea iniciar sesión, produce hacha para la tala.
    2) Un tipo de objeto que produce diferentes comportamientos de acuerdo con algunos atributos que le devuelve.
    3) Concéntrese en el
    modo de estrategia de creación de objetos :
    1) Use el hacha producida por la fábrica para hacer las cosas correspondientes, por ejemplo, use el hacha para cortar personas y use el hacha para cortar madera.
    2) El método correspondiente se ejecuta de acuerdo con el objeto correspondiente que proporcione.
    3) La elección del comportamiento de atención

3. Modelo de fábrica simple: de acuerdo con las condiciones de selección del cliente, para ayudar a los clientes a crear un objeto.
 Modo de estrategia: el cliente le da un objeto creado y lo ayuda a hacer las cosas correspondientes.
Ventajas y desventajas de los dos modelos

primer vistazo a los dos modos de código de cliente:
// Cliente en modo de fábrica simple: 
Operación op;
 // 
Entregar a clase de fábrica simple para crear objeto 
op = OperationFactory.CreateOperate ( " + " ); op.StrNumberA = 10 ; 
op.StrNumberB = 20 ;
 // Llamar al objeto generado Método 
doble resultado = op.GetResult (); 
Console.WriteLine (resultado);
 
// Cliente en modo de estrategia: 
doble total = 0 ;
 vacío privado  btnOk_Click ( remitente de objeto , EventArgs e) 
{ 
    CashContext cc = null ;
     // el cliente crea un interruptor de objeto (cbxType.SelectedItem.ToString ()) 
    { case : " Carga normal " : 
            cc = nuevo CashContext ( nuevo CashNormal ()); pausa ;
         caso : " Más de
             300 devuelve 100 " : 
            cc =
    
        new CashContext ( new CashReturn ());
             break ;  
         case : " 20% off " : 
            cc = new CashContext ( new CashRebate ());
             break ;   
    } 
    // Calcule la tarifa cobrada por la estrategia específica y entréguela a la clase de contexto para ejecutar el método correspondiente , El cliente solo necesita recibir el valor devuelto para 
    doble acceptMoney = cc.GetResult (Convert.ToDouble (txtPrice.Text) * Convert.ToDouble (txtNum.Text));
     // Calcular el costo 
    total total + = acceptMoney; 
    listBox1.Items .Agregar ( " Precio unitario: " + txtPrice.Text + "数量 :" + txtNum.Text + "  " + comboBox1.SelectedItem.ToString () + " 总计 :" + acceptMoney); 
    lblResult.Text = total.ToString (); 
}

 

Al comparar el código del cliente, se descubre que el
  patrón de fábrica simple: la creación del objeto se transfiere a la clase de fábrica simple. El cliente solo necesita ingresar las condiciones correspondientes, y no es responsable de la creación del objeto, pero el cliente debe llamar al método de clase de algoritmo . Pero una vez que necesite agregar una nueva clase de operación, como la operación de raíz abierta, debe modificar la clase de fábrica simple.
  Modo de estrategia: la selección y creación de objetos aún debe realizarla usted mismo, pero la responsabilidad de llamar a los métodos se le otorga a la clase Context. Una vez que se necesita agregar una nueva estrategia, se debe modificar el cliente.

Por lo tanto, la deficiencia del modelo de fábrica simple es que cuando aumenta la nueva demanda, la clase de fábrica debe modificarse con frecuencia. Solo se utiliza el modo de estrategia. Cuando aumentan los nuevos requisitos, el cliente necesita ser modificado. El cliente todavía tiene la responsabilidad de crear objetos y no reduce la presión sobre el cliente. Para usar estos dos modos juntos, debe modificar la clase Context, que de todos modos no es perfecta.

Supongo que te gusta

Origin www.cnblogs.com/wkfvawl/p/12695924.html
Recomendado
Clasificación