Как си спомняте разликата между модела на абстрактна фабрика и модела на фабричния метод в дизайнерските модели?


Отговор 1:

Фабричен модел на дизайн:

  • Той попада под модел на Creative Creative Design.Factory модел казва, че създаването на обект ще се обработва от друг клас, използвайки входния тип.

Предимства:

  • Тя позволява хлабаво съединяване.

Кога да използвате фабричен модел на проектиране?

  • Фабричният дизайн се използва, когато имаме суперклас с множество подкласове и въз основа на вложените данни, трябва да върнем един от подкласа. Пример: Ако ресторантът сервира вегетарианска, не-вегетарианска и италианска храна. Отнасяйте се с VegFood, NonVegFood и ItalianFood като три класа, чийто суперклас е Food.Ако клиент пита "Veg", тогава методът Factory ще върне класа "VegFood".

Пример:

Стъпка 1: Създайте абстрактен клас "Food", който има две променливи, наречени "billPerPerson" и "items".

 публичен абстрактен клас Храна

{
    защитена двойна сметкаPerPerson;
    защитени комплект елементи;

    обществена храна (двойна сметкаPerPerson)

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

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

    {
        обратна сметкаPerPerson;

    }

    публично задайте getItems ()
    {
        връщане на артикули;
    }
}

Стъпка 2: Създайте конкретни класове, които разширяват абстрактния клас „Храна“

обществен клас VegFood разширява храните
{
    публичен VegFood ()

    {
        супер (100);
        items.add ( "лениво");
        items.add ( "Dosa");
        items.add ( "вада");
    }
}

обществен клас NonVegFood разширява храните
{
    обществен NonVegFood ()
    {
        супер (120);
        items.add ( "Biriyani");
        items.add ("Пиле 65");
    }
}

Стъпка 3: Създайте FoodServer, който е фабричен клас, за да създадете обект за бетон въз основа на информацията:

обществен клас FoodServer

{
    публична статична храна getFood (String foodType)

    {
        ако (foodType.equals ("veg"))
        {
            върнете нов VegFood ();
        }
        иначе ако (foodType.equals ("non veg"))
        {
            върнете нов NonVegFood ();
        }
        още
        {
            System.out.println („Ние не сервираме“ + foodType);
            връща нула;
        }
    }
}

Стъпка 4: Основен клас "Клиент", за да получите необходимата храна въз основа на вида храна.

Клиент в обществена класа
{
    public static void main (String [] args)
    {
        Хранителен клиент1Food = FoodServer.getFood ("veg");
        System.out.println ( "Customer1");
        System.out.println ("Артикули:" + customer1Food.getItems (). ToString ());
        System.out.println ("Бил:" + customer1Food.getBill ());
        Food customer2Food = FoodServer.getFood ("non veg");
        System.out.println ( "Customer1");
        System.out.println ("Продукти:" + customer2Food.getItems (). ToString ());
        System.out.println ("Бил:" + customer2Food.getBill ());
    }
}

Абстрактен модел на фабричния дизайн:

  • Той попада под Creative 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 ("не програмиране"))
        {
            връщане на нов NonProgrammingCourse ();
        }
        още
        {
            връща нула;
        }
    }
}

Стъпка 7:

  • Създайте фабричен клас "SourceFactory", който разширява "SourceCourseFactory"
публичен клас SourceFactory разширява SourceCourseFactory
{

    @Override
    публичен източник getSource (String sourceType)
    {
        ако (sourceType.equalsIgnoreCase ( "онлайн"))
        {
            върнете нов онлайн ();
        }
        иначе ако (sourceType.equalsIgnoreCase ("офлайн"))
        {
            върнете ново офлайн ();
        }
        още
        {
            връща нула;
        }
    }

    @Override
    публичен курс getCourse (String courseType)
    {
       връща нула;
    }
    
}

Стъпка 8:

  • Създайте основен клас, който извиква клас Абстрактна фабрика, за да получи истинския обект от фабричен клас и след това той използва този обект за извършване на други други операции.
 публичен клас ExampleMain
{
    public static void main (String [] args)
    {
        SourceCourseFactory курс = FactoryCreator.getSourceCourseFactory ("курс");

        System.out.println (course.getCourse ( "програмиране") getCourseName ().);

        SourceCourseFactory source = FactoryCreator.getSourceCourseFactory ("източник");
        System.out.println (source.getSource ( "онлайн") getSourceName ().);

    }
}