[Design Mode] modo de fábrica - método de fábrica estática (en realidad no es un patrón de diseño)

breve introducción

De acuerdo con la "cabeza modo de primer diseño", hay tres modos de fábrica: / fábrica estática simple, método de fábrica y la fábrica abstracta.

Nota: De hecho, no es un patrón de diseño factoría estática, es más como un hábito de programación. Pero aquí se basa en notas hechas por [1], con el fin de facilitar la gestión de distinción, afirmando falsamente que se trata de un modelo de fábrica.

 En este artículo se describe el método de fábrica estática.

1, las definiciones de: definición de una planta que utiliza un método estático simple, una fábrica estática.

2, la razón: el modo de fábrica estática, porque no sirve para crear una instancia de objeto del objeto, es posible crear un método simple usando una fábrica estática.

3, Desventajas:

· No se puede cambiar a través de la herencia para crear el comportamiento de un objeto.

· Clase si no contienen constructor público o protegido, no se puede heredar.

4, las ventajas:

· En general, desea obtener ejemplos del método más comúnmente utilizado es el de proporcionar un constructor público llama a la clase, pero no va a ser mejor elasticidad usando un método de fábrica estática, cuando la implementación del cambio, sólo se necesita cambiar el método de fábrica estática en ella.

· Y los métodos de construcción no son el mismo método, fábrica estática puede tener su propio nombre específico.

· No siempre crear un nuevo objeto llamado. El uso del método de fábrica estática externa para proporcionar un solo ejemplo, una instancia se prepara por adelantado, después de varias llamadas pueden ser, por lo que puede crear una instancia reducir la duplicación, mal lugar tener en cuenta que los problemas de seguridad hilo.

· Se puede devolver un objeto de cualquier subclase del tipo declaración original.

 

5 , la implementación específica ( código completo ): 

  • Estática de fábrica: crear objetos de datos de proceso 
público  de clase SimplePizzaFactory {
     público pizza createPizza (tipo String) {
        Pizza de pizza = nulo ;
        si (type.equals ( "queso" )) {
             vuelven  nueva CheesePizza ();
        } Demás  si (type.equals ( "pepperoni" )) {
             vuelven  nueva PepperoniPizza ();
        } Demás  si (type.equals ( "almeja" )) {
             vuelven  nueva ClamPizza ();
        } Demás  si (type.equals ( "vegetariano" )) {
             vuelven  nueva VeggiePizza ();
        } Else  retorno  nula ;
    }
}
  • Cliente: utilizado para crear objetos utilizando una fábrica estática 
public class PizzaStore{
    SimplePizzaFactory fábrica;
    pública PizzaStore (fábrica SimplePizzaFactory) {
         este .factory = fábrica;
    }
    pública pizza orderPizza (tipo String) {
        la pizza de pizza;
        la pizza = factory.createPizza (tipo);
        pizza.prepare ();
        pizza.bake ();
        pizza.cut ();
        caja de pizza();
        devolver la pizza;
    }
}
  • categorías abstractas del producto: 

 

pública  abstracta  clase pizza {
    Nombre de la cadena; // Nombre 
    Cadena Dough; // masa tipo 
    salsa de cadena; // salsa de tipo 
    ArrayList <String> = coberturas es nuevo nuevo el ArrayList <String> (); // un condimento 
    void prepare () {
        System.out.println ( "Preparación de" + nombre);
        System.out.println ( "Tossing masa ..." );
        System.out.println ( "La adición de la salsa ..." );
        System.out.println ( "Adición de ingredientes:" );
        para ( int i = 0; i <toppings.size (); i ++ ) {
            System.out.println ( "" + toppings.get (i));
        }
    }
    vacío hornear () {
        System.out.println ( "Bake durante 25 minutos a 350" );
    }
    nula corte () {
        System.out.println ( "Corte la pizza en rebanadas diagonales" );
    }
    vacío caja () {
        System.out.println ( "lugar de pizza en la caja oficial PizzaStore" );
    }
    pública Cadena getName () {
         retorno nombre;
    }
    pública Cadena toString () {
        Display StringBuffer = nuevo StringBuffer ();
        display.append ( "------" + nombre + "----- \ n" );
        display.append (masa + "\ n" );
        display.append (salsa + "\ n" );
        para (String superando: ingredientes) {
            display.append (superando + "\ n" );
        }
        volver display.toString ();
    }
}
  • categorías de productos específicos: 

 

// Pizza de queso 
pública  clase CheesePizza la extiende pizza {
     público CheesePizza () {
        nombrar = "Cheese Pizza" ;
        masa = "Cheese Dough" ;
        salsa = "cheesesauce" ;

        toppings.add ( "Cheese queso" );
    }
}

// almeja de pizza 
pública  clase ClamPizza la extiende pizza {
     público ClamPizza () {
        nombrar = "almeja Pizza" ;
        masa = "almeja Dough" ;
        salsa = "salsa de almejas" ;

        toppings.add ( "almeja" );
    }
}

// salami pizzas 
pública  clase PepperoniPizza la extiende pizza {
     público PepperoniPizza () {
        nombrar = "Pepperoni Pizza" ;
        masa = "salchichones Dough" ;
        salsa = "salsa de salchichones" ;

        toppings.add ( "pepperoni" );
    }
}

// Pizza vegetariana 
pública  clase VeggiePizza la extiende pizza {
     público VeggiePizza () {
        nombrar = "Veggie Pizza" ;
        masa = "Veggie Dough" ;
        salsa = "Sauce Veggie" ;

        toppings.add ( "Veggie" );
    }
}
  • prueba: 
público  de clase PizzaTest {
     públicas  estáticas  void main (String [] args) {
        Fábrica SimplePizzaFactory = nuevo SimplePizzaFactory ();
        PizzaStore tienda = nueva PizzaStore (de fábrica);
        La pizza de pizza = store.orderPizza ( "queso" );
        System.out.println ( "Ethan ordenó un" + pizza.getName () + "\ n" );
        System.out.println (pizza);
        la pizza = store.orderPizza ( "vegetariano" );
        System.out.println ( "Joel ordenó un" + pizza.getName () + '\ n' );
        System.out.println (pizza);
    }
}

Resultados de operación como se muestra a continuación:

 

referencias:

[1] dirigirse primero patrón de diseño

[2] https://www.jianshu.com/p/fa15f63d399a

Supongo que te gusta

Origin www.cnblogs.com/mj-selina/p/12486980.html
Recomendado
Clasificación