Este artículo describe el caso de consumo de KFC implementado por Java utilizando el modelo de fábrica abstracta. Compártelo para su referencia, como sigue:
1. Definición de patrones
El patrón de fábrica abstracto proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar clases de implementación concretas.
El modelo de fábrica abstracta permite a los clientes usar interfaces abstractas para crear un conjunto de productos relacionados. Las clases de clientes y las clases de fábrica están separadas. Cuando los clientes necesitan productos, solo necesitan solicitarlos a la fábrica. Los clientes pueden obtener nuevos productos sin modificación.
2. Ejemplos del modelo
1 análisis de patrones
Tomamos prestada la escena de padre e hijo yendo a la tienda KFC para consumir para ilustrar este patrón. La captura de pantalla después de realizar el análisis abstracto es el siguiente
2 Modelado estático de patrones de fábrica abstracta
3 ejemplos de código
3.1 El establecimiento de alimentos abstractos
Alimentos abstractos - AbstractBasefood
paquete com.demo.factory.model;/** * * clase base de alimentos * * @author maofw * */public abstract AbstractBaseFood {// Tipo de cadena protegida de categoría; // Cantidad protegida int num; // Precio de flotador protegido de precio; // Total public float TotalPrice () {return this.num * this.price; }}Interfaz de alimentos - ifood
paquete com.demo.factory.model;/*** Interfaz de alimentos abstracto** @author maofw**/public interfaz ifood {/*** Imprima información de alimentos*/void printmesage ();}3.2 Establecer clases de base abstractas para diferentes alimentos
Clase base de hamburguesas - Hamburgo
paquete com.demo.factory.model; /** * Hamburg Base Class * @author maofw * * /public abstract Class Hamburg extiende AbstractBaseFood implementos ifood {public void printMesage () {System.out.Println ("-" + this.kind + "Hamburger con sabor sabor, /" + this. ", /t total:" + this.totalPrice ()); }}Alas de pollo
paquete com.demo.factory.model; /** * CLASE DE BASE DEL ALLAS DE COLLO * @author maofw * * /public abstract classwingswings extiende abstractBaseFood implementos ifood {public void printmesage () {system.out.println ("-" + this.kind + "alas de pollo con sabor, /Tune Price:" + this.price + ", /t cuantity +" + thisnum. /t total: " + this.totalPrice ()); }}Clase base de papas fritas - Frenchfries
paquete com.demo.factory.model; /** * French Fries Base Clase * @author maofw * * /public abstract Class Frenchfries extiende AbstractBaseFood implementos ifood {public void printMesage () {System.out.Println ("-" + this.kind + "Fries con sabor, /T Unitar /t total: " + this.totalPrice ()); }}Clase base de bebidas - Bebida
paquete com.demo.factory.model; /** * Beverage Base Class * @author maofw * * /public abstract class Beverage extiende AbstractBaseFood implementos ifood {public void printMesage () {System.out.println ("-" + this.kind + "Beverage, /t Unit Price:" + this.price + ", /t Quarterity:" + "," + " /" /" /" /", TAT /TATAT /TATAT /TAT /TATM /TATAT Total: " + this.totalPrice ()); }}3.3 Crear alimentos específicos
Hamburguesa de pierna de pollo picante - Chinahanburm
paquete com.demo.factory.model.kfc; import com.demo.factory.model.hamburg;/** * hamburguesa de pierna de pollo picante de estilo chino * * @author maofw * */public class Chinahanburm extiende Hamburg {/** * Constructing Method * * @param Kind * @param Price * @param num */Public Chinahanburm (INTER NUM) (INTERIOR {THEK. "picante"; this.price = 14.0f; this.num = num; }}Orleans Chicken Leas - Chinachickenwings
paquete com.demo.factory.model.kfc; import com.demo.factory.model.chickenwings;/** * Clase de implementación de alas de pollo * * @author maofw * */public class chinachickenwings extiende pollowings {public chinachickenwings (int num) {this.kind = "orleans"; this.price = 2.5f; this.num = num; }}Papas fritas - China Frenchfries
paquete com.demo.factory.model.kfc; import com.demo.factory.model.frenchfries;/** * Clase de implementación de papas fritas * * @author maofw * */clase pública Chinafrenchfries extiende Frenchfries {Public Chinafrenchfries (int num) {this.kind = "normal"; this.price = 8.0f; this.num = num; }}Coca -Cola - Chinabeage
paquete com.demo.factory.model.kfc; import com.demo.factory.model.beverage;/** * Clase de implementación de bebidas * * @author maofw * */public class chinabeverage extiende la bebida {public chinabeverage (int num) {this.kind = "cola"; this.price = 7.0f; this.num = num; }}3.4 Establecer una fábrica
Crear una fábrica de KFC abstracta: IKFCFactory produce alimentos abstractos
paquete com.demo.factory.itf; import com.demo.factory.model.beverage; import com.demo.factory.model.chickenwings; import com.demo.factory.model.frenchfries; import com.demo.factory.model.hamburg;/** * kfc base de base abstracta * * @aauthor mAofw * * * * * * * * * * * * * * * * * * * * * * Ikfcfactory {// producir hamburguesa pública hamburgo createhamburg (int num); // produce papas fritas públicas frías createFrenchfries (int num); // produce alas de pollo altas de pollo createechickenwings (int num); // Producir bebidas Public Beverage CreateBeverage (int num);}Cree una fábrica de KFC específica - Chinakfcfactory para producir alimentos específicos
paquete com.demo.factory.itf; import com.demo.factory.model.beverage; import com.demo.factory.model.chickenwings; import com.demo.factory.model.frenchfries; import.demo.factory.model.hamburg; import.demo.factory.model.kfc.chc.chc.chc.ch.chinage; importador; com.demo.factory.model.kfc.chinachickenwings; import com.demo.factory.model.kfc.chinafrenchfries; import com.demo.factory Chinabeverage (num); } // produce alas de pollo asados Orleans Public Chickenwings CreateChickenwings (int num) {return New Chinachickenwings (num); } // producir frías createFrenchfries (int num) {return new ChinaFrenchfries (num); } // producir hamburguesa de pierna de pollo picante pública hamburgo createhamburg (int num) {return new Chinahanburm (num); }}3.5 Crear una clase de cliente - Cliente
paquete com.demo.factory.custom; import com.demo.factory.itf.ikfcfactory; import com.demo.model.beverage; import @author maofw * */public class Customer {// Resumen de fábrica privada ikfcfactory kfcfactory; // El método de constructor pasa la fábrica abstracta como un parámetro en el cliente público (IKFCFactory KFCFactory) {this.kfcfactory = kfcfactory; } / *** ordene comida* / / / ordene hamburguesa de pierna de pollo picante Public Float Orderhamburg (int num) {// Obtener hamburguesa de pierna de pollo picante Hamburgo Hamburgo = kfcfactory.createhamburg (num); // Información de orden de salida hamburgo.printmesage (); // devolver el precio total devolver hamburgo.totalPrice (); } // ordene al alas asadas alas de pollo asados float ordenchickenwings (int num) {// obtenga orleans alitas de pollo asadoswingswings pollowings = kfcfactory.createChickenwings (num); // Información de pedido de salida de Chickenwings.printmesage (); // devolver el precio total de devolución de las tierras de pollo.totalprice (); } // ordene papas fritas pública float orderfrenchfries (int num) {// Get Fries Frenchfries Frenchfries = Kfcfactory.CreateFrenchfries (num); // Información de orden de salida Frenchfries.printmesage (); // devolver el precio total return frenchfries.totalPrice (); } // Orden Coca -Cola Public Float OrderBeverage (int // Información de orden de salida Beverage.printmesage (); // devolver el precio total devolución de bebidas.totalPrice (); }}Exhibición de la historia 3.6
paquete com.demo.factory; import java.lang.management.managementFactory; import java.net.httpurlconnection; import java.net.url; import java.net.urlConnection; import java.net.urlconnection; import java.sql.connection; import java.sql.drivermaner; import; java.sql.preparedStatement; import java.sql.sqlexception; import java.text.numberformat; import java.util.arrays; import java.util.calendar; import java.util.resourceBundle; import com.demo.factory.customer; import com.demo.factory.itf.chinakfcFactory; import com.demo.factory.itf.ikfcFactory; public class MainApp { / ** * Método de aplicación principal * * * @param args * / public static void main (string [] args) { / ** * definir un kfc (ikfcfactory type) * / ikfcfactory Kfcfactory = args) Chinakfcfactory (); / *** Papá y su hijo entraron a KFC para prepararse para ordenar*/ Cliente Customer = New Customer (KFCFactory); / *** Empiece a ordenar*/ // una hamburguesa de pata de pollo picante flotante hamhurgmoney = customer.orderhamburg (1); // Cuatro alas de pollo a la parrilla de Orleans flotan pollowingsmoney = customer.Orderchickenwings (4); // un paquete de papas fritas FrenchfriesMoney = Customer.OrderFrenchfries (1); // Dos tazas de Cola Float BeverageMoney = Customer.OrderBeVeverage (2); System.out.println ("Total:" + (Hamhurgmoney + ChickenwingsMoney + FrenchfriesMoney + Beveragemoney)); }}Resultados de ejecución:
-hamburguesa picante, precio unitario: 14.0, cantidad: 1, total: 14.0
-ORLEANS Saborado alitas de pollo, precio unitario: 2.5, cantidad: 4, total: 10.0
—Ordinario sabor papas fritas, precio unitario: 8.0, cantidad: 1, total: 8.0
-Cola Drink, Precio unitario: 7.0, Cantidad: 2, Total: 14.0
Total: 46.0
3. Los principios de diseño de este modelo
1 Use más combinaciones de objetos y menos herencia
2. Para programación abstracta, no para la programación de implementación
3 objetos de productos se crean a través del método de exposición de fábrica
4. Use ocasiones
1. Cree una familia de productos y use productos relacionados juntos;
2 Desea proporcionar una biblioteca de productos y solo desea mostrar su interfaz en lugar de implementación;
3 Al usar la fábrica en combinación.
Para obtener más información sobre los algoritmos de Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación de Java DOM", "Resumen de Java Archivo y TIPS de operación de directorio" y "Summary of Java Cache Operation Tips" TIPS ""
Espero que este artículo sea útil para la programación Java de todos.