Відповідь 1:

Шаблон дизайну заводу:

  • Він підпадає під шаблон дизайну креативного дизайну. Факторний шаблон зазначає, що створенням об'єкта буде займатися інший клас, використовуючи тип введення.

Переваги:

  • Це дозволяє зв'язати нещільне з'єднання.

Коли використовувати шаблон дизайну заводу?

  • Фабрична модель дизайну застосовується, коли у нас є суперклас з декількома підкласами, і на основі вхідних даних нам потрібно повернути один з підкласів. Розглядайте VegFood, NonVegFood та ItalianFood як три класи, суперклас яких є Food.Якщо клієнт запитує "Veg", то заводський метод поверне клас "VegFood".

Приклад:

Крок 1: Створіть абстрактний клас "Їжа", який має дві змінні під назвою "billPerPerson" та "items".

 громадський абстрактний клас харчування

{
    захищений подвійний рахунокPerPerson;
    захищені набори предметів;

    громадська їжа (подвійний рахунокPerPerson)

    {
        this.billPerPerson = billPerPerson;
        this.items = новий HashSet <> ();
    }

    публічний подвійний getBill ()

    {
        зворотний рахунокPerPerson;

    }

    публічний набір getItems ()
    {
        повернення предметів;
    }
}

Крок 2: Створіть конкретні класи, які розширюють абстрактний клас «Їжа»

Громадський клас VegFood поширює продукти харчування
{
    загальнодоступний VegFood ()

    {
        супер (100);
        items.add ("Холодно");
        items.add ("Доса");
        items.add ("Вада");
    }
}

громадський клас NonVegFood поширює продукти харчування
{
    загальнодоступний NonVegFood ()
    {
        супер (120);
        items.add ("Біріяні");
        items.add ("Курка 65");
    }
}

Крок 3: Створіть FoodServer, який є класом Factory, щоб створити об'єкт для конкретного на основі інформації:

громадський клас FoodServer

{
    загальнодоступна статична їжа getFood (String foodType)

    {
        якщо (foodType.equals ("veg"))
        {
            повернути новий VegFood ();
        }
        інакше, якщо (foodType.equals ("non veg"))
        {
            повернути новий NonVegFood ();
        }
        ще
        {
            System.out.println ("Ми не подаємо" + foodType);
            повернути нуль;
        }
    }
}

Крок 4: Основний клас "Клієнт", щоб отримати необхідну їжу на основі харчового типу.

Замовник громадського класу
{
    public static void main (String [] аргументи)
    {
        Food customer1Food = FoodServer.getFood ("veg");
        System.out.println ("Клієнт1");
        System.out.println ("Пункти:" + customer1Food.getItems (). ToString ());
        System.out.println ("Рахунок:" + customer1Food.getBill ());
        Food customer2Food = FoodServer.getFood ("non veg");
        System.out.println ("Клієнт1");
        System.out.println ("Пункти:" + customer2Food.getItems (). ToString ());
        System.out.println ("Рахунок:" + customer2Food.getBill ());
    }
}

Абстрактний шаблон дизайну фабрики:

  • Він підпадає під Creational Design Pattern. Він надає інтерфейс для створення сімей пов'язаних або залежних об'єктів, не вказуючи їх конкретні класи. .Запитує клієнта від того, щоб знати, який завод буде повернутий.

Приклад із реального життя:

  • Подумайте про велику фабрику, яка виробляє мило. Ця фабрика не виготовлятиме всі речі, необхідні для мила. У ньому буде багато підзаводів, які б виготовляли «мильну смугу», «мильну оболонку» тощо. головним заводом.

Коли використовувати абстрактний заводський шаблон дизайну?

  • Клієнт повинен бути незалежним від того, як створюються об'єкти та для якого об’єкта класу створюється. Це корисно, коли об’єкт потрібно створити з сімейства класів.

ПРИМІТКА. Це може бути заплутано, тому, будь ласка, подивіться відео, яке я вклав у кінці цієї сторінки.

Приклад:

Крок 1:

  • Створіть інтерфейс під назвою "Курс".
Курс публічного інтерфейсу
{
    public String getCourseName ();
}

Крок 2:

  • Створіть конкретні класи, що реалізують інтерфейс «Курс».
Програмування громадського класуКур реалізує курс
{
    @Override
    public String getCourseName ()
    {
       повернути "Java";
    }
}

Громадський клас NonProgrammingCourse реалізує Курс
{
    @Override
    public String getCourseName ()
    {
        повернути "DSP";
    }
}

Крок 3:

  • Створіть інтерфейс під назвою "Джерело".
Джерело публічного інтерфейсу
{
    public String getSourceName ();
}

Крок 4:

  • Створіть конкретні класи, які реалізують інтерфейс "Джерело".
публічний клас Офлайн реалізує Джерело
{
    @Override
    public String getSourceName ()
    {
        повернути «Книги»;
    }
}

публічний клас Інтернет реалізує Джерело
{
    @Override
    public String getSourceName ()
    {
        повернути "YouTube";
    }
}

Крок 5:

  • Створіть абстрактний клас "SourceCourseFactory".
публічний абстрактний клас SourceCourseFactory
{
    публічне абстрактне джерело getSource (String sourceType);
    
    публічний реферат Курс getCourse (String courseType);
}

Крок 6:

  • Створіть заводський клас "CourseFactory", який розширить "SourceCourseFactory"
Громадський клас CourseFactory розширює SourceCourseFactory
{
    @Override
    загальнодоступне джерело getSource (String sourceType)
    {
        повернути нуль;
    }

    @Override
    загальнодоступний курс getCourse (String courseType)
    {
        якщо (courseType.equalsIgnoreCase ("програмування"))
        {
            повернути новий програмуючий курс ();
        }
        інше, якщо (courseType.equalsIgnoreCase ("не програмування"))
        {
            повернути новий курс непрограмування ();
        }
        ще
        {
            повернути нуль;
        }
    }
}

Крок 7:

  • Створіть заводський клас "SourceFactory", який розширить "SourceCourseFactory"
публічний клас SourceFactory розширює SourceCourseFactory
{

    @Override
    загальнодоступне джерело getSource (String sourceType)
    {
        if (sourceType.equalsIgnoreCase ("онлайн"))
        {
            повернути новий Інтернет ();
        }
        інше якщо (sourceType.equalsIgnoreCase ("офлайн"))
        {
            повернути новий офлайн ();
        }
        ще
        {
            повернути нуль;
        }
    }

    @Override
    загальнодоступний курс getCourse (String courseType)
    {
       повернути нуль;
    }
    
}

Крок 8:

  • Створіть основний клас, який викликає абстрактний заводський клас, щоб отримати реальний об'єкт класу Factory, а потім він використовує цей об'єкт для виконання інших інших операцій.
 публічний клас ExampleMain
{
    public static void main (String [] аргументи)
    {
        SourceCourseFactory курс = FactoryCreator.getSourceCourseFactory ("курс");

        System.out.println (course.getCourse ("програмування"). GetCourseName ());

        SourceCourseFactory source = FactoryCreator.getSourceCourseFactory ("джерело");
        System.out.println (source.getSource ("онлайн"). GetSourceName ());

    }
}