Kako se sjećate razlike između obrasca apstraktne tvornice i uzorka tvorničke metode u uzorcima dizajna?


Odgovor 1:

Uzorak tvorničkog dizajna:

  • To spada pod Uzorak kreativnog dizajna. Faktorni obrazac kaže da će stvaranje predmeta rukovati druga klasa pomoću vrste unosa.

prednosti:

  • Omogućuje labavo spajanje.

Kada koristiti tvornički dizajn uzorka?

  • Tvornički dizajnerski obrazac koristi se kada imamo superklasu s više potklasa, a na temelju unosa moramo vratiti jedan od podklasa. Primjer: Ako restoran poslužuje Veg hranu, Non-Veg hranu i Talijansku hranu. Tretirajte VegFood, NonVegFood i ItalianFood kao tri klase čiji je superklasa Hrana. Ako kupac zatraži "Veg", tada bi tvornička metoda vratila klasu "VegFood".

Primjer:

Korak 1: Stvorite apstraktnu klasu "Hrana" koja sadrži dvije varijable nazvane "billPerPerson" i "items".

 javna apstraktna klasa Hrana

{
    zaštićeni dvostruki računPerPerson;
    zaštićeni set predmeta;

    javna hrana (dvostruki računPerPerson)

    {
        this.billPerPerson = billPerPerson;
        this.items = novi HashSet <> ();
    }

    javni dvostruki getBill ()

    {
        povratni računPerPerson;

    }

    javno Postavi getItems ()
    {
        povratni predmeti;
    }
}

Korak 2: Stvorite konkretne razrede koji će proširiti apstraktnu klasu "Hrana"

Javna klasa VegFood produžuje hranu
{
    javni VegFood ()

    {
        super (100);
        items.add ( "Lijeno");
        items.add ( "Dossay");
        items.add ( "Vada");
    }
}

javna klasa NonVegFood produžuje hranu
{
    javni NonVegFood ()
    {
        super (120);
        items.add ( "Biriyani");
        items.add ("Piletina 65");
    }
}

Korak 3: Napravite FoodServer koji je tvornička klasa za izradu objekta za beton na temelju podataka:

javna klasa FoodServer

{
    javna statička hrana getFood (String foodType)

    {
        ako (foodType.equals ("veg"))
        {
            vrati novi VegFood ();
        }
        drugo ako (foodType.equals ("non veg"))
        {
            vrati novi NonVegFood ();
        }
        drugo
        {
            System.out.println ("Ne serviramo" + foodType);
            vratiti null;
        }
    }
}

Korak 4: Glavna klasa "Kupac" za dobivanje potrebne hrane na temelju vrste hrane.

Kupac javne klase
{
    javni statički void main (String [] args)
    {
        Hrana kupac1Food = FoodServer.getFood ("povrće");
        Sustava ( "Customer1");
        System.out.println ("Stavke:" + customer1Food.getItems (). ToString ());
        System.out.println ("Račun:" + customer1Food.getBill ());
        Hrana kupac2Food = FoodServer.getFood ("non veg");
        Sustava ( "Customer1");
        System.out.println ("Stavke:" + customer2Food.getItems (). ToString ());
        System.out.println ("Račun:" + customer2Food.getBill ());
    }
}

Sažetak tvorničkog dizajna:

  • To potpada pod Uzorak kreativnog dizajna. Omogućuje sučelje za stvaranje obitelji povezanih ili ovisnih objekata bez navođenja njihovih konkretnih klasa. Abstraktni tvornički uzorci su super tvornica koja će na temelju ulaza vratiti najbolju tvornicu. Djeluje kao tvornica tvornica .To klijent aplicira od saznanja koja će tvornica biti vraćena.

Primjer iz stvarnog života:

  • Razmislite o velikoj tvornici koja proizvodi sapun. Ta tvornica neće proizvoditi sve potrebne stvari za sapun. Imala bi mnogo pod-tvornica koje bi izrađivale "sapunicu", "sapunicu" itd. Sve bi se sastavilo od glavne tvornice.

Kada koristiti apstraktni tvornički uzorak dizajna?

  • Klijent ne bi trebao biti neovisan o tome kako se objekti stvaraju i za koji je predmet klase stvoren. To je korisno kada objekt treba stvoriti iz obitelji klasa.

NAPOMENA: To može biti zbunjujuće, pa stoga pogledajte videozapise koje sam ugradio na kraju ove stranice.

Primjer:

Korak 1:

  • Napravite sučelje pod nazivom "Tečaj".
Tečaj javnog sučelja
{
    javni String getCourseName ();
}

Korak 2:

  • Stvorite konkretne klase koje implementiraju sučelje "Tečaj".
Javna klasa ProgrammingCourse provodi tečaj
{
    @Override
    javni String getCourseName ()
    {
       vratiti "Java";
    }
}

javna klasa NonProgrammingCourse provodi tečaj
{
    @Override
    javni String getCourseName ()
    {
        povratak "DSP";
    }
}

Korak 3:

  • Napravite sučelje pod nazivom "Izvor".
Izvor javnog sučelja
{
    javni String getSourceName ();
}

Korak 4:

  • Stvorite konkretne klase koje implementiraju "Izvorno" sučelje.
javna klasa Offline implementira izvor
{
    @Override
    javni String getSourceName ()
    {
        povratak "Knjige";
    }
}

Javna klasa Online provodi Izvor
{
    @Override
    javni String getSourceName ()
    {
        vratiti "YouTube";
    }
}

Korak 5:

  • Napravite apstraktnu klasu "SourceCourseFactory".
javna apstraktna klasa IzvorCourseFactory
{
    javni sažetak Izvor getSource (String sourceType);
    
    javni sažetak Tečaj getCourse (String courseType);
}

Korak 6:

  • Stvorite tvorničku klasu "CourseFactory" koja proširuje "SourceCourseFactory"
Javna klasa CourseFactory proširuje SourceCourseFactory
{
    @Override
    javni izvor getSource (String sourceType)
    {
        vratiti null;
    }

    @Override
    javni tečaj getCourse (String courseType)
    {
        ako (courseType.equalsIgnoreCase ( "programiranje"))
        {
            vrati novi programski tečaj ();
        }
        drugo ako (courseType.equalsIgnoreCase ("ne programiranje"))
        {
            vrati novi NonProgrammingCourse ();
        }
        drugo
        {
            vratiti null;
        }
    }
}

Korak 7:

  • Stvorite tvorničku klasu "SourceFactory" koja proširuje "SourceCourseFactory"
javna klasa SourceFactory proširuje SourceCourseFactory
{

    @Override
    javni izvor getSource (String sourceType)
    {
        ako (sourceType.equalsIgnoreCase ( "on-line"))
        {
            vrati novi Online ();
        }
        drugo ako (izvorType.equalsIgnoreCase ("offline"))
        {
            vrati novi izvanmrežni ();
        }
        drugo
        {
            vratiti null;
        }
    }

    @Override
    javni tečaj getCourse (String courseType)
    {
       vratiti null;
    }
    
}

Korak 8:

  • Napravite glavnu klasu koja poziva klasu Abstract Factory da biste dobili pravi objekt Factory klase i zatim taj objekt koristi za obavljanje drugih operacija.
 javna klasa ExampleMain
{
    javni statički void main (String [] args)
    {
        SourceCourseFactory tečaj = FactoryCreator.getSourceCourseFactory ("tečaj");

        System.out.println (course.getCourse ( "programiranje") getCourseName ().);

        SourceCourseFactory source = FactoryCreator.getSourceCourseFactory ("izvor");
        System.out.println (source.getSource ( "on-line") getSourceName ().);

    }
}