Se on a luova suunnittelukuvio joka puhuu esineen luomisesta. Tehdassuunnittelumalli käskee määrittää rajapinnan (Java-rajapinta tai abstrakti luokka) objektin luomista varten ja antaa alaluokkien päättää, mikä luokka instantioidaan.
Tärkeitä aiheita Factory-menetelmän suunnittelumallille Javassa
- Mikä on Factory Method -suunnittelumalli Javassa?
- Milloin käyttää Factory Method -suunnittelumallia Javassa?
- Tehdasmenetelmän suunnittelumallin keskeiset osat
- Tehdasmenetelmän suunnittelumalliesimerkki Javassa
- Factory Method -suunnittelumallin käyttötapaukset Javassa
- Factory Method Design Patternin edut Javassa
- Java-tehdasmenetelmän suunnittelumallin haitat
Mikä on Factory Method -suunnittelumalli Javassa?
Factory Method Design Pattern määrittelee rajapinnan objektin luomiseen, mutta anna alaluokan päättää, mikä luokka instantoi. Tehdasmenetelmä antaa luokan lykätä ilmentymistä alaluokkaan.
Alla on selitys yllä olevasta kuvasta:
- Rajapinnan tehdasmetodi antaa luokan lykätä ilmentymistä yhteen tai useampaan konkreettiseen alaluokkaan.
- Koska nämä suunnittelumallit puhuvat esineen ilmentymisestä, ne kuuluvat luovan suunnittelumallin luokkaan.
- Jos huomaamme nimen Tehdasmenetelmä , se tarkoittaa, että on olemassa menetelmä, joka on tehdas, ja yleensä tehtaat ovat mukana luovassa tavarassa ja tässä luodaan objekti.
- Se on yksi parhaista tavoista luoda objekti, jossa objektin luontilogiikka on piilotettu asiakkaalta. Katsotaan nyt toteutusta.
Milloin käyttää Factory Method -suunnittelumallia Javassa?
Tehdasmenetelmän suunnittelumallia voidaan käyttää Javassa seuraavissa tapauksissa:
java arraylist lajitella
- Luokka ei voi ennustaa, minkä tyyppisiä objekteja se tarvitsee luoda.
- Luokka haluaa sen alaluokkien määrittävän sen luomat objektit.
- Luokat delegoivat vastuun yhdelle useista avustaja-alaluokista, ja pyrit pitämään tiedot siitä, mikä avustaja-alaluokka on delegoitu tietyssä laajuudessa tai tietyssä paikassa.
Tehdasmenetelmän suunnittelumallin keskeiset osat
Tuote
- Se on abstrakti luokka tai käyttöliittymä, joka määrittää yhteiset toiminnot tehtaan luomille objekteille.
- Betonituotteet ovat varsinaisia tuoterajapinnan toteuttavia luokkia, joista jokainen edustaa tietyntyyppistä luotavaa objektia.
Luoja
- Se on abstrakti luokka tai käyttöliittymä, joka ilmoittaa tehdasmenetelmän.
- Tämä menetelmä vastaa tuoteobjektien luomisesta, mutta se delegoi varsinaisen luomisen alaluokille.
Betonin luojat
- Nämä ovat Creatorin alaluokkia, jotka toteuttavat tehdasmenetelmän.
- He päättävät, minkä betonituotteen luovat, usein syöttöparametrien tai kokoonpanon perusteella.
Tehdasmenetelmä
- Se on Creator-luokassa määritetty menetelmä, joka vastaa tuoteobjektien luomisesta.
- Se on tyypillisesti julistettu abstraktiksi Creatorissa ja toteutettu Concrete Creatorsissa.
Tehdasmenetelmän suunnittelumalliesimerkki Javassa
Ongelmailmoitus
Olet kehittämässä ohjelmistojärjestelmää sähköisen kaupankäynnin alustalle, joka käsittelee erilaisia tuotteita. Jokainen tuoteluokka (esim. elektroniikka, vaatteet, kirjat) vaatii erityistä käsittelyä luomisen aikana. Haluat kuitenkin irrottaa asiakaskoodin konkreettisesta tuotteen luontilogiikasta joustavuuden ja ylläpidettävyyden parantamiseksi. Lisäksi haluat mahdollistaa helpon laajentamisen lisäämällä uusia tuotetyyppejä tulevaisuudessa muuttamatta olemassa olevaa koodia.
Ratkaisu käyttämällä abstraktia luokkaa
Yllä oleva ongelma voidaan ratkaista käyttämällä Factory Method Design Pattern -mallia:
Java
// 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();> > }> }> |
>
>Lähtö
This is Concrete Product A. This is Concrete Product B.>
Ratkaisu käyttöliittymällä
Yllä oleva ongelma voidaan ratkaista käyttämällä Factory Method Design Pattern -mallia:
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();> > }> }> |
>
>Lähtö
This is Concrete Product A. This is Concrete Product B.>
Factory Method -suunnittelumallin käyttötapaukset Javassa
Tässä on joitain yleisiä Javan Factory Method Design -mallin sovelluksia:
- Creative Frameworks:
- JDBC (Java Database Connectivity) käyttää tehtaita laajasti yhteyksien, lausekkeiden ja tulosjoukkojen luomiseen. Riippuvuusinjektiokehykset, kuten Spring ja Guice, luottavat voimakkaasti tehtaisiin papujen luomisessa ja hallinnassa.
- GUI-työkalusarjat:
- Swing ja JavaFX käyttävät tehtaita käyttöliittymäkomponenttien, kuten painikkeiden, tekstikenttien ja tarrojen, luomiseen, mikä mahdollistaa räätälöinnin ja joustavuuden käyttöliittymäsuunnittelussa.
- Kirjauskehykset:
- Lokikehykset, kuten Log4j ja Logback, käyttävät tehtaita eri kokoonpanoilla varustettujen loggerien luomiseen, mikä mahdollistaa kirjaustasojen ja tulostuskohteiden hallinnan.
- Serialisointi ja deserialisointi:
- Objektien serialisointikehykset käyttävät usein tehtaita objektien luomiseen sarjoitetusta tiedosta, jotka tukevat erilaisia serialisointimuotoja ja versiointia.
- Plugin-järjestelmät:
- Plugin-pohjaiset järjestelmät käyttävät usein tehtaita laajennusinstanssien lataamiseen ja luomiseen dynaamisesti, mikä mahdollistaa laajennettavuuden ja mukauttamisen.
- Pelikehitys:
- Pelimoottorit käyttävät usein tehtaita luodakseen erilaisia peliobjekteja, hahmoja ja tasoja, mikä edistää koodin järjestämistä ja joustavuutta.
- Verkkokehitys:
- Web-kehykset käyttävät joskus tehtaita näkymäkomponenttien, ohjaimien ja palvelujen luomiseen, mikä mahdollistaa modulaarisuuden ja testattavuuden verkkosovelluksissa.
Factory Method Design Patternin edut Javassa
Factory Method Design Patternin edut Javassa ovat:
- Irrottaminen: Se erottaa objektien luontilogiikan kyseisiä objekteja käyttävästä asiakaskoodista. Tämä tekee koodista joustavamman ja ylläpidettävämmän, koska luontiprosessin muutokset eivät vaadi muutoksia asiakaskoodiin.
- Laajennettavuus: Uusia tuotetyyppejä on helppo ottaa käyttöön asiakaskoodia muuttamatta. Sinun tarvitsee vain luoda uusi Concrete Creator -alaluokka ja ottaa käyttöön tehdasmenetelmä uuden tuotteen valmistamiseksi.
- Testattavuus: Se yksinkertaistaa yksikkötestausta sallimalla tuotteen luomisen pilkkaamisen tai tyrkyttämisen testien aikana. Voit testata eri tuotetoteutuksia erikseen luottamatta varsinaiseen objektien luomiseen.
- Koodin uudelleenkäyttö: Tehdasmenetelmää voidaan käyttää uudelleen sovelluksen eri osissa, joissa objektin luomista tarvitaan. Tämä edistää objektien luontilogiikan keskittämistä ja uudelleenkäyttöä.
- Kapselointi: Se piilottaa konkreettiset tuoteluokat asiakaskoodilta, mikä tekee koodista vähemmän riippuvaisen tietyistä toteutuksista. Tämä parantaa huollettavuutta ja vähentää kytkentää.
Java-tehdasmenetelmän suunnittelumallin haitat
Javan Factory Method Design Patternin haitat ovat:
- Lisääntynyt monimutkaisuus: Se esittelee lisää luokkia ja käyttöliittymiä ja lisää abstraktiokerroksen, joka voi tehdä koodista monimutkaisempaa ymmärtää ja ylläpitää, erityisesti niille, jotka eivät tunne kuviota.
- Yleiskustannukset: Polymorfismin ja dynaamisen sitomisen käyttö voi hieman vaikuttaa suorituskykyyn, vaikka tämä on usein merkityksetöntä useimmissa sovelluksissa.
- Tiivis kytkentä tuotehierarkioiden sisällä: Concrete Creators on edelleen tiiviisti kytketty vastaaviin betonituotteisiinsa. Muutokset toiseen edellyttävät usein muutoksia toiseen.
- Riippuvuus betonin alaluokista: Asiakaskoodi riippuu edelleen abstraktista Creator-luokasta, mikä vaatii sen konkreettisten alaluokkien tuntemusta oikeiden tehdasmetodekutsujen tekemiseksi.
- Ylikäytön mahdollisuus: On tärkeää käyttää Factory Method -mallia harkiten, jotta vältetään sovelluksen liiallinen suunnittelu. Yksinkertainen objektin luominen voidaan usein hoitaa suoraan ilman tehdasta.
- Testauksen haasteet: Itse tehdaslogiikan testaus voi olla monimutkaisempaa.
Johtopäätös
Tähän mennessä olemme oppineet mikä on Factory method -suunnittelumalli ja kuinka se toteutetaan. Uskon, että meillä on nyt oikea käsitys tämän suunnittelumekanismin eduista. Tehdasmenetelmät tunkeutuvat työkalupakkeihin ja kehyksiin. Edellinen dokumenttiesimerkki on tyypillinen käyttö MacAppissa ja ET++:ssa.
Lue lisää : Java-suunnittelumallien opetusohjelma