В этой статье описывается случай потребления KFC, реализованный Java с использованием абстрактной заводской модели. Поделитесь этим для вашей ссылки, следующим образом:
1. Определение шаблона
Абстрактная заводская шаблон обеспечивает интерфейс для создания семейств связанных или зависимых объектов без указания конкретных классов реализации.
Абстрактная заводская модель позволяет клиентам использовать абстрактные интерфейсы для создания набора связанных продуктов. Классы клиентов и заводские занятия разделены. Когда клиентам нужны какие -либо продукты, им нужно только запросить их на фабрике. Клиенты могут получать новые продукты без модификации.
2. Примеры модели
1 Анализ шаблона
Мы одолжили сцену отца и сына в магазин KFC, чтобы потреблять, чтобы проиллюстрировать этот шаблон. Снимок экрана после выполнения абстрактного анализа выглядит следующим образом
2 Статическое моделирование абстрактных заводских паттернов
3 примеры кода
3.1 Создание абстрактной еды
Абстрактная еда - AbstractBaseFood
пакет com.demo.factory.model;/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // защищенное количество int num; // цена защищенная цена плавания; // Total Public Float TotalPrice () {return this.num * this.price; }}Пищевой интерфейс - ifood
Пакет com.demo.factory.model;/*** Abstract Food Interface** @author maofw**/public interface ifood {/*** Распечатать информацию о пищевых продуктах*/void printmesage ();}3.2 Установить абстрактные базовые классы для разных продуктов
Базовый класс гамбургера - Гамбург
package com.demo.factory.model;/** * Hamburg base class * @author maofw * */public abstract class Hamburg extends AbstractBaseFood implements IFood{ public void printMesage() { System.out.println("--" + this.kind + "flavored hamburger, /t unit price: " + this.price + ", /t quantity: " + this.num + ", /t итога:" + this.totalprice ()); }}Куриные крылышки
Пакет com.demo.factory.model; /** * Базовый класс куриных крыльев * @author maofw * * /public Abstract Class Crackwings расширяет AbstractBaseFood Ifood {public void printmesage () {System.out.println («-». /t итога: " + this.totalprice ()); }}Френточный базовый класс - Френчфрес
Пакет com.demo.factory.model; /** * Френточный базовый класс фри * * @author maofw * * /public абстрактный класс Frenchfries расширяет AbstractBaseFood Ifud {public void printmesage () {System.out.println («-». /t итога: " + this.totalprice ()); }}Базовый класс напитков - напиток
Пакет com.demo.factory.model; /** * Базовый класс напитков * @author maofw * * /public Abstract Class Beverage extrable Basefood реализует ifood {public void printmesage () {System.out.println ("-" + this.kind + "Beverage, /t intect:" + this.price + ", /t Quantise:" + This.price + This. this.totalprice ()); }}3.3 Создайте конкретные продукты
Острый бургер с куриной ногой - Чинаханбурм
Пакет com.demo.factory.model.kfc; import com.demo.factory.model.hamburg;/** * * Бюргер с пряной куриной ногой в китайском стиле * * * @author maofw * */public class chinahanburm Extends hamburg {/** * * * * = "острый"; this.price = 14.0f; this.num = num; }}Орлеан куриные крылышки - chinachickenwings
пакет com.demo.factory.model.kfc; import com.demo.factory.model.chickenwings;/** * Класс реализации куриных крыльев * * @author maofw * */public class chinachickenwings расширяет куриные крылышки {public chinachickenwings (int num) {this.kind = "orleans"; this.price = 2,5f; this.num = num; }}Картофель фри - Chinafrenchfries
Пакет com.demo.factory.model.kfc; import com.demo.factory.model.frenchfries;/** * Класс реализации фри Фриса * * @author maofw * */public class chinafrenchfries расширяет французские френа this.price = 8,0f; this.num = num; }}
Кока -кола - chinabeverage
пакет com.demo.factory.model.kfc; import com.demo.factory.model.beverage;/** * Класс реализации напитков * * @author maofw * */public class chinabeverage расширяет напиток {public chinabeverage (int num) {this.kind = "cola"; this.price = 7,0f; this.num = num; }}3.4 Установить фабрику
Создать абстрактную фабрику KFC - ikfcfactory производит абстрактную еду
пакет com.demo.factory.itf; import com.demo.factory.model.beverage; import com.demo.factory.model.chickenwings; импорт com.demo.factory.model.frenchfries; импорт com.demo.factory.model.hamburg;/** kfc. Ikfcfactory {// производить гамбургер public hamburg createhamburg (int num); // производить картофель фри Public FrenchFries createFrenchfries (int num); // производить куриные крылышки публичные куриные крылышки CreateChickenWings (int num); // производить напитки общественный напиток CreateBeverage (int num);}Создайте конкретную фабрику KFC - chinakfcfactory для производства конкретных продуктов питания
пакет com.demo.factory.itf; import com.demo.factory.model.beverage; import com.demo.factory.model.chickenwings; импорт com.demo.factory.model.frenchfries; imporm.demo.factory.model.hamburg; импорт com.demo.factory.modelary.Chorgy.Chirce. com.demo.factory.model.kfc.chinachickenwings; import com.demo.factory.model.kfc.chinafrenchfries; import com.demo.factory.model.kfc.chinahanburm; public class chinakfcfactor Chinabeverage (num); } // Производить orleans жареные куриные крылышки публичные куриные крылышки CreateChickenwings (int num) {return new chinachickenwings (num); } // Создание FrenchFries createFrenchfries (int num) {return new Chinafrenchfries (num); } // Производить пряную куриную ногу бургера Public Hamburg CreateHamburg (int num) {вернуть новый Чинаханбурм (num); }}3.5 Создайте класс клиента - клиент
пакет com.demo.factory.custom; import com.demo.factory.itf.ikfcfactory; import com.demo.factory.model.beverage; импорт com.demo.factory.model.chickenwings; import com.demo.factory.model.frenchfres; import Com.demo.factory.modery.model.frenchfries; импорт. @author maofw * */public class customer {// абстрактная фабрика частная ikfcfactory kfcfactory; // Метод конструктора передает абстрактную фабрику в качестве параметра в общедоступного клиента (ikfcfactory kfcfactory) {this.kfcfactory = kfcfactory; } / *** Заказывать еду* / // заказ пряной куриной ноги Burger public orderhamburg (int num) {// Получить пряную куриную ногу гамбург hamburg = kfcfactory.createhamburg (num); // Информация о выводе заказа hamburg.printmesage (); // Возврат общей ценовой возврата hamburg.totalprice (); } // заказ Orleans жареные куриные крылышки public float orderchickenwings (int num) {// get orleans жареные куриные крылышки курицы курицы = kfcfactory.createchickenwings (num); // Информация о выводе witchwings.printmesage (); // возврат общая цена возврата куриных крыльев.totalprice (); } // Заказывать фри Public float orderfrenchfries (int num) {// Получить фри FrenchFries FrenchFries = kfcfactory.createfrenchfries (num); // Информация о выводе FrenchFries.printMesage (); // возврат общей ценовой возврат FrenchFries.totalPrice (); } // Заказ coke public float orderbeverage (int num) {// Получить кокс напиток = kfcfactory.createbeverage (num); // Информация о выводе информации о напитке. Pprintmesage (); // Возврат общей ценовой возврата beverage.totalprice (); }}3.6 Сюжетный дисплей
пакет com.demo.factory; импорт java.lang.management.managementfactory; импорт java.net.httpurlConnection; импорт java.net.url; импорт java.net.urlconnection; импорт java.net.urlconnection; импорт java.sql.connection; import java.sql.driversection; импорт. java.sql.preparedStatement; import java.sql.sqlexception; import java.text.numberformat; import java.util.arrays; импорт java.util.calendar; import java.util.resourcebundle; импорт com.demo.caustom.custmer; com.demo.factory.itf.chinakfcfactory; import com.demo.factory.itf.ikfcfactory; открытый класс mainapp { / ** * Основной метод применения * * @param args * / public static void main (string [] args) { / ** * define kfc (ikfcfactory) Chinakfcfactory (); / *** Папа и сын вошли в KFC, чтобы подготовиться к заказу*/ customer = новый клиент (KFCFactory); / *** Начните заказать*/ // Острый бургер с куриной ногой float hamhurgmoney = customer.orderhamburg (1); // Четыре Орлеана жареные куриные крылышки плавают куриные крылышки = customer.ordorchickenwings (4); // пакет картофеля фри Flankfriesmoney = customer.orderfrenchfries (1); // две чашки колы float beveragemoney = customer.orderbeverage (2); System.out.println ("total:" + (hamhurgmoney + Chickenwingsmoney + Frenchfriesmoney + Beveragemoney)); }}Результаты работы:
-пряный гамбургер, цена за единицу: 14,0, количество: 1, всего: 14,0
-Орлеанские ароматизированные куриные крылышки, цена за единицу: 2,5, количество: 4, всего: 10.0
-Расходы фри вкуса, цена за единицу: 8,0, количество: 1, всего: 8,0
-Напиток колы, цена за единицу: 7,0, количество: 2, всего: 14,0
Всего: 46,0
3. Принципы дизайна этой модели
1 Используйте больше комбинаций объектов и меньше наследования
2. Для абстрактного программирования, а не для программирования реализации
3 объекта продукта создаются с помощью метода заводской экспозиции
4. Используйте случаи
1. Создайте семейство продуктов и используйте связанные продукты вместе;
2 Хочу предоставить библиотеку продуктов и хотят отобразить его интерфейс вместо реализации;
3 При использовании завода в комбинации.
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.