Ohjelmointi

Tehdasmenetelmät

K: Käyttäessäni "polymorfismia puhtaimmassa muodossaan" näin tuntemattoman termin tehdasmenetelmä. Voisitteko kuvata mikä tehdasmenetelmä on ja kuinka voin käyttää sitä?

A: Tarkastellaan esimerkkiä.

Jokainen ohjelma tarvitsee tavan ilmoittaa virheistä. Harkitse seuraavaa käyttöliittymää:

Listaus 1

julkinen käyttöliittymä Trace {// julkisen virheenkorjauksen ottaminen käyttöön ja poistaminen käytöstä setDebug (boolen virheenkorjaus); // kirjoita virheenkorjaussanoma public void debug (String message); // kirjoita virheilmoitus public void error (String message); } 

Oletetaan, että olet kirjoittanut kaksi toteutusta. Yksi toteutus (Listing 2) kirjoittaa viestit komentoriville, kun taas toinen (Listing 3) kirjoittaa ne tiedostoon.

Listaus 2

public class FileTrace toteuttaa Trace {private java.io.PrintWriter pw; yksityinen looginen virheenkorjaus; public FileTrace () heittää java.io.IOException {// todellinen FileTrace tarvitsee hankkia tiedostonimen jonnekin // esimerkiksi minä koodaan sen pw = new java.io.PrintWriter (uusi java.io.FileWriter (" c: \ trace.log ")); } public void setDebug (looginen virheenkorjaus) {this.debug = debug; } public void debug (String message) {if (debug) {// tulostaa vain, jos virheenkorjaus on totta pw.println ("DEBUG:" + viesti); pw.flush (); }} public void -virhe (merkkijono) {// tulosta aina virheet pw.println ("ERROR:" + viesti); pw.flush (); }} 

Listaus 3

julkinen luokka SystemTrace toteuttaa Trace {private boolean debug; public void setDebug (boolen virheenkorjaus) {this.debug = debug; } public void debug (String message) {if (debug) {// tulostaa vain, jos virheenkorjaus on totta System.out.println ("DEBUG:" + viesti); }} public void -virhe (merkkijono) {// tulosta aina virheet System.out.println ("ERROR:" + viesti); }} 

Jos haluat käyttää kumpaakin näistä luokista, sinun on tehtävä seuraava:

Listaus 4

// ... jotkut koodit ... SystemTrace-loki = uusi SystemTrace (); // ... koodi ... log.debug ("Enter loog"); // ... jne ... 

Nyt jos haluat muuttaa Jäljittää Ohjelman käyttämä toteutus, sinun on muokattava kutakin luokkaa, joka a Jäljittää toteutus. Käytettävien luokkien lukumäärästä riippuen Jäljittää, muutoksen tekeminen voi viedä paljon työtä. Lisäksi haluat välttää luokkien muuttamista mahdollisimman paljon.

Tehdasmenetelmän avulla voimme olla paljon älykkäämpiä siitä, miten luokkamme saavat Jäljittää toteutusinstanssit:

Listaus 5

public class TraceFactory {public static Trace getTrace () {return new SystemTrace (); }} 

getTrace () on tehdasmenetelmä. Nyt, kun haluat saada viitteen a Jäljittää, voit yksinkertaisesti soittaa TraceFactory.getTrace ():

Listaus 6

// ... jokin koodi ... Trace log = new TraceFactory.getTrace (); // ... koodi ... log.debug ("Enter loog"); // ... jne ... 

Tehdasmenetelmän käyttäminen ilmentymän hankkimiseen voi säästää paljon työtä myöhemmin. Yllä olevassa koodissa TraceFactory palaa SystemTrace tapauksia. Kuvittele jälleen, että vaatimuksesi muuttuvat ja että sinun on kirjoitettava viestisi tiedostoon. Jos kuitenkin käytät tehdasmenetelmää ilmentymän hankkimiseksi, sinun on tehtävä vain yksi muutos yhdessä luokassa uusien vaatimusten täyttämiseksi. Sinun ei tarvitse tehdä muutoksia kaikissa luokissa, jotka käyttävät Jäljittää. Sen sijaan voit yksinkertaisesti määrittää uudelleen getTrace ():

Listaus 7

public class TraceFactory {public static Trace getTrace () {try {return new FileTrace (); } catch (java.io.IOException ex) {Trace t = uusi SystemTrace (); t.error ("FileTrace-tiedostoa ei voitu instantisoida:" + ex.getMessage ()); paluu t; }}} 

Lisäksi tehdasmenetelmät osoittautuvat hyödyllisiksi, kun et ole varma luokan konkreettisesta toteutuksesta. Sen sijaan voit jättää nämä yksityiskohdat tehdasmenetelmään.

Yllä olevissa esimerkeissä ohjelmasi ei tiennyt luomista FileTrace tai SystemTrace tapauksia. Sen sijaan voit ohjelmoida objektisi yksinkertaisesti käyttämään Jäljittää ja jättää konkreettisen toteutuksen ilmentäminen tehdasmenetelmään.

Tony Sintes on BroadVisionin pääkonsultti. Hän on Sun-sertifioitu Java 1.1 -ohjelmoija ja Java 2 -kehittäjä, ja hän on työskennellyt Javan kanssa vuodesta 1997.

Lisätietoja tästä aiheesta

  • Ensimmäinen pysähdys kaikille kuviotarpeillesi löytyy kuuluisasta Neljän jengin kirjastaSuunnittelumalleja, Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides (Addison-Wesley, 1995)

    //www.amazon.com/exec/obidos/ASIN/0201633612/javaworld

  • Haluta lisää? Katso Java-kysymykset ja vastaukset Hakemisto koko Q & A-luetteloon

    //www.javaworld.com/javaworld/javaqa/javaqa-index.html

  • Jos haluat saada yli 100 oivaltavaa Java-vinkkiä yrityksen parhailta mieliltä, ​​käy osoitteessa JavaWorld 's Java-vinkkejä indeksi

    //www.javaworld.com/javatips/jw-javatips.index.html

  • Lisää artikkeleita uusille Java-ohjelmoijille on osoitteessa Johdantotaso osa JavaWorld: n ajankohtainen hakemisto

    //www.javaworld.com/javaworld/topicalindex/jw-ti-introlevel.html

  • Puhu Java-aloittelija keskustelu

    //www.itworld.com/jump/jw-javaqa/forums.itworld.com/webx?14@@.ee6b804/1195!skip=1125

  • Vastaanota viikoittaisia ​​Java-ohjelmointivinkkejä tilaamalla ilmainen Java-ohjaaja sähköpostiuutiskirje

    //reg.itworld.com/cgi-bin/subcontent12.cgi

Tämän tarinan "Tehdasmenetelmät" julkaisi alun perin JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found