Este artigo descreve o caso de consumo KFC implementado pelo Java usando o modelo abstrato de fábrica. Compartilhe -o para sua referência, como segue:
1. Definição do padrão
O padrão de fábrica abstrato fornece uma interface para criar famílias de objetos relacionados ou dependentes, sem especificar classes de implementação de concreto.
O modelo abstrato de fábrica permite que os clientes usem interfaces abstratas para criar um conjunto de produtos relacionados. Aulas de clientes e aulas de fábrica são separadas. Quando os clientes precisam de produtos, eles precisam apenas solicitá -los da fábrica. Os clientes podem obter novos produtos sem modificação.
2. Exemplos do modelo
1 Análise de padrão
Emprestamos a cena do pai e do filho indo à KFC Store para consumir para ilustrar esse padrão. A captura de tela após a realização de análises abstratas é a seguinte
2 modelagem estática de padrões de fábrica abstratos
3 exemplos de código
3.1 O estabelecimento de comida abstrata
Comida abstrata - AbstractBaseFood
pacote com.demo.factory.model;/** * * Classe de base alimentar * * @author maofw * */public abstrate class abstractBaseFood {// Category Protected String tipo; // Quantidade protegida int num; // Preço da flutuação protegida pelo preço; // Total public float totalPrice () {return this.num * this.price; }}Interface alimentar - ifood
pacote com.demo.factory.model;/*** interface alimentar abstrata** @author maofw**/interface pública ifood {/*** imprima informações alimentares*/void printMesage ();}3.2 Estabelecer classes base abstratas para diferentes alimentos
Hamburger Base Classe - Hamburgo
pacote com.demo.factory.model; /** * Classe base de hamburgo * @author maofw * * /public Resumo Class Hamburgo estende abstratobasefood implementa ifood {public void printMesage () {System.out.println ("-" + this.kind + "sabor de hamburger, /t unit. ", /t total:" + this.TotalPrice ()); }}Asas de frango
pacote com.demo.factory.model; /** * Classe de base das asas de frango * @author maofw * * /public class As ChickenWings estende abstratoBaseFood implementa ifood {public void printMesage () {System.out.println (" + this.kind +" com sabor de frango, /t unit. /T TOTAL: " + this.TotalPrice ()); }}Classe base de batatas fritas - Frenchfries
pacote com.demo.factory.model; /** * Classe de base de batatas fritas * * @Author maofw * * /public class Class Frenchfries estende o abstratoBaseFood implementa o ifood {public void printMesage () {System.out.println ("-" + this.kind + "" Friededed " /t unit.ous." /T TOTAL: " + this.TotalPrice ()); }}Classe base de bebida - bebida
pacote com.demo.factory.model; /** * Classe de base da bebida * @author maofw * * /public abstract class Beverage estende o abstractBaseFood implementa ifood {public void printMesage () {System.out.println ("-" + this.kind + "touverage, /t unit:" Total: " + this.TotalPrice ()); }}3.3 Crie alimentos específicos
Hambúrguer de perna de frango picante - Chinahanburm
pacote com.demo.factory.model.kfc; importar com.demo.factory.model.hamburg;/** * hambúrguer de perna de frango picante no estilo chinês * * @author maofw * */public Class Chinahanburm estende hamburgo {/** * = "Spicy"; this.price = 14.0f; this.num = num; }}Asas de frango Orleans - ChinChifkeSwings
pacote com.demo.factory.model.kfc; importar com.demo.factory.model.chickenwings;/** * Classe de implementação das asas de frango * * @author maofw * */public class ChinChickenwings estende as galinhas {public Chinachicking (int nUM) {this.kind = "ORLELAs"; this.price = 2.5f; this.num = num; }}Batatas fritas - Chinafrenchfries
pacote com.demo.factory.model.kfc; importar com.demo.factory.model.frenchfries;/** * Classe de implementação de batatas fritas * * @author maofw * */public class Chinafrenchfries estende francês {public Chinafrenchfries (int nUM) {this.kind = "normal; this.price = 8.0f; this.num = num; }}Coca -Cola - Chinabeverage
pacote com.demo.factory.model.kfc; import com.demo.factory.model.beverage;/** * Classe de implementação da bebida * * @author maofw * */public class Chinabeverage estende a bebida {public ChinBeverage (int num) {this.kind = "cola"; this.price = 7.0f; this.num = num; }}3.4 Estabeleça uma fábrica
Crie uma fábrica de KFC abstrata - IKFCFactory produz alimentos abstratos
package 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 abstract factory base class* * @author maofw * */public interface IkfcFactory {// produz hamburger public hamburgo createhamburg (int num); // produz batatas fritas francês francês createfrenchfries (int num); // produz as asas de frango public As Chickenwings CreateChickenwings (int num); // Produzir bebidas Public Beverage CreateBeverage (int num);}Crie uma fábrica KFC específica - ChinakfcFactory para produzir alimentos específicos
pacote com.demo.factory.itf; importar com.demo.factory.model.beverage; importar com.demo.factory.model.chickenwings; importar com.demo.factory.model.frenchfries; import com.demo.factory.model.hamburg; com.demo.factory.model.kfc.chinachickenwings; importar com.demo.factory.model.kfc.chinafrenchfries; importar com.demo.factory.model.kfc.chinahanburm; classe pública Chinakfcractory implementos ikfcFactory { ChinBeverrage (num); } // Produzir orleans assados asas de frango public wings wings wings wings createchinglesswings (int num) {retorna novos chinachickenwings (num); } // Produce Frenchfries createfrenchfries (int num) {retorna novos Chinafrenchfries (num); } // Produzir hambúrguer de perna de frango picante Hamburgo Createhamburg (int num) {Return New Chinahanburm (num); }}3.5 Crie uma aula de cliente - Cliente
pacote com.demo.factory.custom; import com.demo.factory.itf.ikfcFactory; importar com.demo.factory.model.beverage; importar com.demo.factory.model.chickenwings; importação.Demo.Factory.model.frenhodel.murpt-mempor.demo; @author maofw * */public class Customer {// abstrate fábrica private ikfcFactory kfcFactory; // O método construtor passa a fábrica abstrata como um parâmetro para o cliente público (ikfcFactory kfcFactory) {this.kfcFactory = kfcFactory; } / *** Encomende comida* / // Encomende o hambúrguer de galinha picante Float Orderhamburg (int num) {// Obtenha hambúrguer de perna de frango picante hamburgo hamburgo = kfcfactory.createhamburg (num); // Informações sobre pedidos de saída hamburg.printMesage (); // retorna o retorno total do preço hamburgo.TotalPrice (); } // Encomende Orleans assado asas de frango public flutuante OrderChifkeSwings (int num) {// Get Orleans assado asas de frango Frangowings Chickenwings = kfcFactory.CreateChickenWings (NUM); // Informações sobre pedidos de saída ChickenWings.printMesage (); // retorno de retorno de retorno total de retorno de galinhas.Totalprice (); } // Pedido Fries Public Float OrderFrenchFries (int num) {// Get Fries Frenchfries Frenchfries = KfcFactory.CreateFrenchfries (num); // Informações sobre pedidos de saída francês Frenchfries.printMesage (); // Retorno de retorno de preço total Frenchfries.TotalPrice (); } // encomendar coque public float OrderBeverAge (int num) {// Obtenha bebida de coque de coque = kfcfactory.createbeverage (num); // Informações sobre pedidos de saída Beverage.printMesage (); // retorna a bebida de retorno total de preço.TotalPrice (); }}3.6 Exibição do enredo
pacote com.demo.factory; importar java.lang.management.ManagementFactory; importar java.net.httpurlConnection; importar java.net.url; import java.net.urlconnection; importação java.net.urlanection; importla.sql.Connection; java.sql.preparedStatement; importar java.sql.sqlexception; importar java.text.numberFormat; importar java.util.arrays; importar java.util.calendar; import Java.util.ResourceBNener; import.Demo.Factory.Custory.Custom.Custom.Custom.Util.ResourceBNeRer; com.demo.factory.itf.chinakfcFactory; importar com.demo.factory.itf.ikfcFactory; public class MainApp { / ** * Método de aplicação principal * * @param args * / public static void main (string [] args) { / ** * define a kfc (ikfcFactor ChinakfcFactory (); / *** Papai e filho entraram no KFC para se preparar para encomendar*/ cliente do cliente = novo cliente (KFCFactory); / *** Comece a encomendar*/ // um hambúrguer de perna de frango picante HamhurgMoney = Customer.orderhamburg (1); // Quatro asas de frango grelhadas de Orleans flutuam Frangowingsmoney = Customer.OrderChifkeSwings (4); // um pacote de batatas fritas FrenchfriesMoney = Customer.OrderFrenchfries (1); // duas xícaras de beverageMoney de float cola = cliente.orderbeverage (2); System.out.println ("Total:" + (HamhurgMoney + ChickenWingsmoney + Frenchfriesmoney + BeverageMoney)); }}Resultados em execução:
-hambúrguer picante, preço unitário: 14.0, Quantidade: 1, Total: 14.0
-Asas de frango com sabor com sabor, Preço unitário: 2,5, Quantidade: 4, Total: 10.0
-Fabristas da Ordem da Fabricação, Preço Unitário: 8.0, Quantidade: 1, Total: 8.0
-Cola Drink, Preço unitário: 7.0, Quantidade: 2, Total: 14.0
TOTAL: 46.0
3. Os princípios de design deste modelo
1 Use mais combinações de objetos e menos herança
2. Para programação abstrata, não para programação de implementação
3 objetos de produto são criados através do método de exposição de fábrica
4. Use ocasiões
1. Crie uma família de produtos e use produtos relacionados juntos;
2 deseja fornecer uma biblioteca de produtos e só deseja exibir sua interface em vez de implementação;
3 Ao usar a fábrica em combinação.
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.