logo

Gamyklos metodo projektavimo modelis Java

Tai yra kūrybos dizaino modelis kad kalbama apie objekto sukūrimą. Gamyklos projektavimo šablonas sako, kad reikia apibrėžti sąsają (Java sąsają arba abstrakčią klasę) objektui sukurti ir leisti poklasiams nuspręsti, kurią klasę sukurti.

gamyklinis metodas



Svarbios „Java“ gamyklinio metodo projektavimo modelio temos

Kas yra gamyklinio metodo projektavimo modelis Java?

Factory Method Design Pattern apibrėžia objekto kūrimo sąsają, tačiau leiskite poklasiui nuspręsti, kurią klasę sukurti. Gamyklos metodas leidžia klasei atidėti egzempliorių kūrimą poklasiui.

Kas-yra-gamyklos-metodas-dizaino modelis



Žemiau pateikiamas aukščiau esančio paveikslėlio paaiškinimas:

mama kulkarni
  • Sąsajos gamyklinis metodas leidžia klasei atidėti egzempliorių sukūrimą vienam ar daugiau konkrečių poklasių.
  • Kadangi šie dizaino modeliai kalba apie objekto egzistavimą, jie patenka į kūrybinio dizaino modelio kategoriją.
  • Jei pastebėsime pavadinimą Gamyklinis metodas , tai reiškia, kad yra metodas, kuris yra gamykla, ir apskritai gamyklos yra susijusios su kūryba ir čia yra sukuriamas objektas.
  • Tai vienas geriausių būdų sukurti objektą, kuriame objekto kūrimo logika yra paslėpta nuo kliento. Dabar pažvelkime į įgyvendinimą.

Kada naudoti gamyklinio metodo dizaino modelį Java?

Gamyklos metodo projektavimo modelis gali būti naudojamas java šiais atvejais:

  • Klasė negali numatyti objektų, kuriuos jai reikia sukurti, tipo.
  • Klasė nori, kad jos poklasiai nurodytų jos kuriamus objektus.
  • Klasės perduoda atsakomybę vienam iš kelių pagalbininkų poklasių, o jūs siekiate, kad informacija apie tai, kuris pagalbininkų poklasis yra deleguotas, būtų tam tikroje srityje arba vietoje.

Pagrindiniai gamyklinio metodo projektavimo modelio komponentai

Raktas-Gamyklos komponentas-metodas-dizainas-Pattern-In-Java



Produktas

  • Tai abstrakti klasė arba sąsaja, apibrėžianti bendras gamyklos sukurtų objektų operacijas.
  • Konkretūs produktai yra tikros klasės, įgyvendinančios Produkto sąsają, kiekviena iš jų atstovauja tam tikro tipo objektams, kuriuos reikia sukurti.

Kūrėjas

  • Tai abstrakti klasė arba sąsaja, kuri deklaruoja gamyklinį metodą.
  • Šis metodas yra atsakingas už produkto objektų kūrimą, tačiau jis perduoda tikrąjį kūrimą poklasiams.

Betono kūrėjai

  • Tai Kūrėjo poklasiai, įgyvendinantys gamyklinį metodą.
  • Jie nusprendžia, kurį konkretų betono gaminį sukurti, dažnai remdamiesi įvesties parametrais arba konfigūracija.

Gamyklos metodas

  • Tai metodas, apibrėžtas Creator klasėje, atsakingas už produkto objektų kūrimą.
  • Kūrėjoje jis paprastai skelbiamas kaip abstraktus ir įgyvendinamas konkrečių kūrėjų veikloje.

„Java“ gamyklinio metodo projektavimo modelio pavyzdys

Problemos pareiškimas

Kuriate programinės įrangos sistemą, skirtą elektroninės prekybos platformai, kuri susijusi su įvairių tipų produktais. Kiekvienai prekių kategorijai (pvz., elektronikai, drabužiams, knygoms) kuriant reikalingas specialus tvarkymas. Tačiau norite atsieti kliento kodą nuo konkretaus produkto kūrimo logikos, kad padidintumėte lankstumą ir priežiūrą. Be to, norite leisti lengvai išplėsti, ateityje pridėdami naujų produktų tipų nekeisdami esamo kodo.

Sprendimas naudojant abstrakčią klasę

Aukščiau pateiktą problemą galima išspręsti naudojant gamyklinio metodo projektavimo modelį:

Java


„Java“ įtraukimas į masyvą



// Abstract Product Class> abstract> class> Product {> >public> abstract> void> display();> }> // Concrete Products> class> ConcreteProductA>extends> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product A.'>);> >}> }> class> ConcreteProductB>extends> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product B.'>);> >}> }> // Creator Abstract Class> abstract> class> Creator {> >public> abstract> Product factoryMethod();> }> // Concrete Creators> class> ConcreteCreatorA>extends> Creator {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductA();> >}> }> class> ConcreteCreatorB>extends> Creator {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductB();> >}> }> // Client Code> public> class> FactoryMethodExample {> >public> static> void> main(String[] args) {> >Creator creatorA =>new> ConcreteCreatorA();> >Product productA = creatorA.factoryMethod();> >productA.display();> >Creator creatorB =>new> ConcreteCreatorB();> >Product productB = creatorB.factoryMethod();> >productB.display();> >}> }>

>

>

kiek metų yra Pitui Deividsonui
Išvestis

This is Concrete Product A. This is Concrete Product B.>

Sprendimas naudojant sąsają

Aukščiau pateiktą problemą galima išspręsti naudojant gamyklinio metodo projektavimo modelį:

Java




kodėl žymeklio sąsaja java

// Product Interface> interface> Product {> >void> display();> }> // Concrete Products> class> ConcreteProductA>implements> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product A.'>);> >}> }> class> ConcreteProductB>implements> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product B.'>);> >}> }> // Factory Interface> interface> Factory {> >Product factoryMethod();> }> // Concrete Factories> class> ConcreteFactoryA>implements> Factory {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductA();> >}> }> class> ConcreteFactoryB>implements> Factory {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductB();> >}> }> // Client Code> public> class> FactoryMethodExample {> >public> static> void> main(String[] args) {> >Factory factoryA =>new> ConcreteFactoryA();> >Product productA = factoryA.factoryMethod();> >productA.display();> >Factory factoryB =>new> ConcreteFactoryB();> >Product productB = factoryB.factoryMethod();> >productB.display();> >}> }>

>

>

Išvestis

ilgas iki stygos
This is Concrete Product A. This is Concrete Product B.>

„Java“ gamyklinio metodo projektavimo modelio naudojimo atvejai

Štai keletas įprastų „Java“ gamyklinio metodo projektavimo modelio taikomųjų programų:

  • Kūrybos karkasai:
    • JDBC („Java Database Connectivity“) plačiai naudoja gamyklas ryšiams, pareiškimams ir rezultatų rinkiniams kurti. Priklausomybės įpurškimo sistemos, tokios kaip „Spring“ ir „Guice“, labai priklauso nuo gamyklų, kuriant ir valdant pupeles.
  • GUI įrankių rinkiniai:
    • „Swing“ ir „JavaFX“ naudoja gamyklas, kad sukurtų vartotojo sąsajos komponentus, pvz., mygtukus, teksto laukus ir etiketes, kad būtų galima tinkinti ir lanksčiai kurti vartotojo sąsają.
  • Registravimo karkasai:
    • Registravimo sistemos, tokios kaip Log4j ir Logback, naudoja gamyklas, kad sukurtų skirtingų konfigūracijų registratorius, leidžiančius valdyti registravimo lygius ir išvesties paskirties vietas.
  • Serializavimas ir deserializavimas:
    • Objektų serializavimo sistemos dažnai naudoja gamyklas, kad sukurtų objektus iš serijinių duomenų, palaikančių skirtingus serializavimo formatus ir versijų kūrimą.
  • Papildinių sistemos:
    • Papildiniais pagrįstos sistemos dažnai naudoja gamyklas, kad įkeltų ir dinamiškai sukurtų papildinių egzempliorius, kad būtų galima išplėsti ir pritaikyti.
  • Žaidimo kūrimas:
    • Žaidimų varikliai dažnai naudoja gamyklas, kad sukurtų įvairių tipų žaidimo objektus, simbolius ir lygius, skatindami kodo organizavimą ir lankstumą.
  • Interneto kūrimas:
    • Žiniatinklio sistemos kartais naudoja gamyklas, kad sukurtų peržiūros komponentus, valdiklius ir paslaugas, todėl žiniatinklio programose galima moduliuoti ir išbandyti.

„Java“ gamyklinio metodo projektavimo modelio privalumai

„Java“ gamyklinio metodo projektavimo modelio pranašumai yra šie:

  • Atsiejimas: Jis atskiria objektų kūrimo logiką nuo kliento kodo, kuris naudoja tuos objektus. Dėl to kodas tampa lankstesnis ir lengviau prižiūrimas, nes kūrimo proceso pakeitimams nereikia keisti kliento kodo.
  • Išplečiamumas: Nesunku įdiegti naujų produktų tipų nekeičiant kliento kodo. Jums tereikia sukurti naują Concrete Creator poklasį ir įdiegti gamyklinį metodą naujam produktui gaminti.
  • Bandomumas: Tai supaprastina vienetų testavimą, nes leidžia tyčiotis arba sustabdyti produkto kūrimą bandymų metu. Galite išbandyti skirtingus produktų įgyvendinimus atskirai, nepasitikėdami tikruoju objekto kūrimu.
  • Kodo pakartotinis naudojimas: Gamyklos metodas gali būti pakartotinai naudojamas įvairiose programos dalyse, kur reikia sukurti objektą. Tai skatina centralizuoti ir pakartotinai panaudoti objektų kūrimo logiką.
  • Inkapsuliavimas: Jis paslepia konkrečias produktų klases nuo kliento kodo, todėl kodas yra mažiau priklausomas nuo konkrečių diegimų. Tai pagerina techninę priežiūrą ir sumažina sujungimą.

„Java“ gamyklinio metodo projektavimo modelio trūkumai

„Java“ gamyklinio metodo projektavimo modelio trūkumai yra šie:

  • Padidėjęs sudėtingumas: Jame pristatomos papildomos klasės ir sąsajos, pridedant abstrakcijos sluoksnį, dėl kurio kodą gali būti sudėtingiau suprasti ir prižiūrėti, ypač tiems, kurie nėra susipažinę su modeliu.
  • Papildomos išlaidos: Polimorfizmo ir dinaminio surišimo naudojimas gali šiek tiek paveikti našumą, nors daugeliu atvejų tai yra nereikšminga.
  • Tvirtas susiejimas produktų hierarchijose: Betono kūrėjai vis dar yra glaudžiai susiję su atitinkamais betono gaminiais. Pakeitus vieną, dažnai reikia pakeisti kitą.
  • Priklausomybė nuo betono poklasių: Kliento kodas vis dar priklauso nuo abstrakčios Creator klasės, todėl norint atlikti teisingus gamyklinių metodų iškvietimus, reikia žinoti konkrečius jos poklasius.
  • Perteklinio naudojimo galimybė: Svarbu apgalvotai naudoti gamyklinio metodo modelį, kad būtų išvengta pernelyg didelio programos projektavimo. Paprastas objektų kūrimas dažnai gali būti atliekamas tiesiogiai, nereikia gamyklos.
  • Bandymo iššūkiai: Pačios gamyklos logikos testavimas gali būti sudėtingesnis.

Išvada

Iki šiol sužinojome, kas yra gamyklinio metodo dizaino modelis ir kaip jį įgyvendinti. Manau, kad dabar gerai suprantame šio projektavimo mechanizmo pranašumus. Gamykliniai metodai persmelkia įrankių rinkinius ir sistemas. Ankstesnis dokumento pavyzdys yra įprastas MacApp ir ET++ naudojimas.

Skaityti toliau : „Java“ dizaino modelių pamoka