Latest web development tutorials

Абстрактный узор завод

Абстрактная фабрика (Abstract Factory Pattern) создается вокруг супер растений других растений. Завод также известен как супер другие заводы фабрики. Этот тип шаблонов проектирования принадлежат создать схему, которая обеспечивает лучший способ для создания объектов.

В абстрактная фабрика, интерфейс отвечает за создание связанных растительных объектов, без явного указания их классы. Каждый созданный объект, в соответствии с завода может обеспечить заводской модели.

введение

Цель: создать серию интерфейса связанных или зависимых объектов без указания их конкретных классов.

Главным образом решить: Основная проблема опций интерфейса.

Когда использовать: Системные продукты имеют более одного семейства продуктов, а также единственная система , в которой семейство потребительских товаров.

Как исправить: в семействе продуктов внутри, определить несколько продуктов.

Код ключа: агрегатные несколько аналогичных продуктов на заводе.

Примеры применения: работа, для того , чтобы принять участие в некоторых встречах, должно быть два или более комплектов одежды его, скажем, деловой костюм (комплекты, ряд конкретных продуктов), платье способа (комплекты, ряд конкретных продуктов), даже для семьи Вы можете иметь деловые женщины, бизнес мужской, женская мода, мужская мода, они также комплекты, а именно ряд конкретных продуктов.Предположим, что ситуация (в действительности не существует, или же, не коммунизм, но в пользу абстрактного описания заводского образца), в вашем доме, один шкаф (бетонный завод) может хранить только один такой одежда (комплекты, серия конкретного продукта), каждый раз, когда вы берете этот комплект одежды из шкафа, естественно, вынимают. С OO думать, чтобы понять, все гардероб (бетонный завод) являются шкафы класса (абстрактная фабрика) один, и каждый из них набор одежды и в том числе конкретной куртки (конкретного продукта), брюки (специфический продукт), это на самом деле конкретная рубашка куртка (абстрактные продукты), специальные брюки брюки (другой абстрактный продукт).

Плюсы: Когда семейство продуктов больше объектов предназначены для совместной работы, мы можем гарантировать , что клиент всегда используют только того же семейства объектов.

Недостатки: Расширенная семейство продуктов очень трудно, увеличить ассортимент продукта, как в абстрактной Творца Рижского кода, но и добавить специальный код внутри.

Сценарии использования: 1, QQ для кожи, набор изменений вместе.2, генерировать различные процедуры операционной системы.

Примечание: Расширенное семейство продуктов трудно, легко расширить уровень продукта.

реализация

Мы создадим интерфейс и реализацию класса интерфейсаформыицветаэтих объектов. Следующим шагом является создание абстрактного класса фабрикиAbstractFactory.Затем определите класс фабрикиShapeFactoryиColorFactory,эти два класса на заводе расширяетсяAbstractFactory.Затем создать классFactoryProducerфабрики создателя /строитель.

AbstractFactoryPatternDemo,наши демонстрационные классы , использующиеFactoryProducer, чтобы получитьAbstractFactoryобъект. Она проходит форма информации оформе(круг / RECTANGLE / квадратное) кAbstractFactory,он должен получить тип объекта. Он также передает информацию о цветеЦвет(красный / зеленый / синий) дляAbstractFactory,он должен получить тип объекта.

Абстрактный рисунок завод UML диаграмма

Шаг 1

Интерфейс для создания формы.

Shape.java

Открытый интерфейс Shape {
   недействительным ничья ();
}

Шаг 2

Создать класс сущностей, который реализует интерфейс.

Rectangle.java

Открытый класс Прямоугольник реализует Shape {

   @Override
   общественного недействительными ничья () {
      ( "Метод Внутри Прямоугольник :: ничья ().") System.out.println;
   }
}

Square.java

Открытый класс Square реализует Shape {

   @Override
   общественного недействительными ничья () {
      ( "Метод Внутри площади :: ничья ().") System.out.println;
   }
}

Circle.java

Открытый класс Circle реализует Shape {

   @Override
   общественного недействительными ничья () {
      ( "Метод Внутри круга :: ничья ().") System.out.println;
   }
}

Шаг 3

Создание интерфейса для цвета.

Color.java

открытый интерфейс Color {
   пустота заполнения ();
}

Шаг 4

Создать класс сущностей, который реализует интерфейс.

Red.java

Открытый класс Красный цвет реализует {

   @Override
   заливка общественного недействительными () {
      ( "Метод Внутри Red :: заливка ().") System.out.println;
   }
}

Green.java

Открытый класс Зеленый цвет реализует {

   @Override
   заливка общественного недействительными () {
      ( "Метод Внутри Green :: заливка ().") System.out.println;
   }
}

Blue.java

Открытый класс Синий реализует цвет {

   @Override
   заливка общественного недействительными () {
      ( "Метод Внутри Синий :: заливки ().") System.out.println;
   }
}

Шаг 5

Создать абстрактный класс для цвета и формы объектов, чтобы получить завод.

AbstractFactory.java

общественного абстрактного класса AbstractFactory {
   Цвет абстрактного GetColor (String цвет);
   абстрактной формы getShape (String форма);
}

Шаг 6

Создание расширенного AbstractFactory фабрики классов, генерацию объекта класса сущностей на основе данной информации.

ShapeFactory.java

Открытый класс ShapeFactory расширяет AbstractFactory {
	
   @Override
   Форма общественного getShape (String shapeType) {
      если (shapeType == NULL) {
         возвращать нуль;
      }		
      если (shapeType.equalsIgnoreCase ( "КРУГ")) {
         вернуть новый круг ();
      } Иначе, если (shapeType.equalsIgnoreCase ( "Прямоугольник")) {
         вернуть новый прямоугольник ();
      } Иначе, если (shapeType.equalsIgnoreCase ( "КВАДРАТ")) {
         вернуть новый квадрат ();
      }
      возвращать нуль;
   }
   
   @Override
   Цвет GetColor (String цвет) {
      возвращать нуль;
   }
}

ColorFactory.java

Открытый класс ColorFactory расширяет AbstractFactory {
	
   @Override
   Форма общественного getShape (String shapeType) {
      возвращать нуль;
   }
   
   @Override
   Цвет GetColor (String цвет) {
      если (цвет == NULL) {
         возвращать нуль;
      }		
      если (color.equalsIgnoreCase ( "RED")) {
         возвращать новый красный ();
      } Иначе, если (color.equalsIgnoreCase ( "ГРИН")) {
         вернуть новый зеленый ();
      } Иначе, если (color.equalsIgnoreCase ( "СИНИЙ")) {
         вернуть новый синий ();
      }
      возвращать нуль;
   }
}

Шаг 7

Создание фабрики категории Создатель / строитель, проходя через форму или цвет, чтобы получить информацию завода.

FactoryProducer.java

Открытый класс FactoryProducer {
   общественности статической AbstractFactory getFactory (выбор String) {
      если (choice.equalsIgnoreCase ( "ВГК")) {
         вернуть новый ShapeFactory ();
      } Иначе, если (choice.equalsIgnoreCase ( "COLOR")) {
         вернуть новый ColorFactory ();
      }
      возвращать нуль;
   }
}

Шаг 8

Используйте FactoryProducer, чтобы получить AbstractFactory, чтобы получить объект класса, передавая информацию о типе сущности.

AbstractFactoryPatternDemo.java

Открытый класс AbstractFactoryPatternDemo {
   государственной статической силы основных (String []) {агдз

      // Получить форму фабрики AbstractFactory ShapeFactory = FactoryProducer.getFactory ( "SHAPE");

      // Получить объект форма круг форма shape1 = shapeFactory.getShape ( "КРУГ");

      // Вызываем метод рисования из shape1.draw Circle ();

      // Получить объект форму прямоугольника Shape shape2 = shapeFactory.getShape ( "Прямоугольник");

      // Вызываем метод рисования из shape2.draw прямоугольника ();
      
      // Получить форму объекта квадратной формы shape3 = shapeFactory.getShape ( "КВАДРАТ");

      // Вызываем метод рисования площади shape3.draw ();

      // Получить цвет Фабрики AbstractFactory colorFactory = FactoryProducer.getFactory ( "COLOR");

      // Получить цвет объекта Красный цвет цвет1 = colorFactory.getColor ( "RED");

      // Вызов метода заливки Красный color1.fill ();

      // Получить объект цвет зеленый цвет color2 = colorFactory.getColor ( "Зеленый");

      // Вызов метода заполнения color2.fill Грина ();

      // Получить объект цвет синий цвет color3 = colorFactory.getColor ( "синий");

      // Вызов метода заливки Синий color3.fill ();
   }
}

Шаг 9

Проверьте выход.

Внутри круга :: ничья () метод.
Внутри прямоугольника :: ничья () метод.
Внутри площади :: ничья () метод.
Внутри Red :: заливка () метод.
Внутри метода Green :: наполняющей ().
Внутри Синий :: заливки () метод.