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