Programovanie

Továrenské metódy

Otázka: Keď som prechádzal „Polymorfizmom v jeho najčistejšej podobe“, uvidel som neznámy pojem továrenská metóda. Mohli by ste mi prosím opísať, čo je továrenská metóda a vysvetliť, ako ju môžem použiť?

A: Zvážme príklad.

Každý program potrebuje spôsob hlásenia chýb. Zvážte nasledujúce rozhranie:

Zoznam 1

verejné rozhranie Trace {// zapnutie a vypnutie ladenia public void setDebug (logické ladenie); // vypísať ladiacu správu public void debug (String message); // vypísať chybovú správu public void error (String message); } 

Predpokladajme, že ste napísali dve implementácie. Jedna implementácia (zoznam 2) zapisuje správy do príkazového riadku, zatiaľ čo iná (zoznam 3) ich zapisuje do súboru.

Zoznam 2

verejná trieda FileTrace implementuje Trace {private java.io.PrintWriter pw; súkromné ​​logické ladenie; public FileTrace () hodí java.io.IOException {// skutočná FileTrace bude musieť niekde získať názov súboru //, napríklad si ho napevno napíšem pw = new java.io.PrintWriter (new java.io.FileWriter (" c: \ trace.log ")); } public void setDebug (logické ladenie) {this.debug = ladenie; } public void debug (reťazcová správa) {if (debug) {// tlačiť iba ak je debug pravdivý pw.println ("DEBUG:" + správa); pw.flush (); }} public void error (String message) {// vytlaci chyby vzdy pw.println ("CHYBA:" + sprava); pw.flush (); }} 

Zoznam 3

verejná trieda SystemTrace implementuje Trace {súkromné ​​boolean ladenie; public void setDebug (logické ladenie) {this.debug = ladenie; } public void debug (reťazcová správa) {if (debug) {// tlačiť iba ak je debug pravdivý System.out.println ("DEBUG:" + správa); }} public void error (String message) {// vytlaci chyby vzdy System.out.println ("CHYBA:" + sprava); }} 

Ak chcete použiť niektorú z týchto tried, budete musieť urobiť nasledovné:

Výpis 4

// ... nejaký kód ... protokol SystemTrace = nový SystemTrace (); // ... kód ... log.debug ("zadanie loogu"); // ... atď ... 

Teraz, ak chcete zmeniť Trace implementácia, ktorú váš program používa, budete musieť upraviť každú triedu, ktorá vytvára inštancie a Trace implementácia. Podľa počtu tried, ktoré využívajú Trace, Zmena môže trvať veľa práce. Navyše sa chcete vyhnúť tomu, aby ste čo najviac zmenili svoje hodiny.

Továrna metóda umožňuje, aby sme boli oveľa chytrejší, pokiaľ ide o to, ako získavajú naše triedy Trace inštancie implementácie:

Zoznam 5

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

getTrace () je továrenská metóda. Teraz, kedykoľvek chcete získať odkaz na a Trace, môžete jednoducho zavolať TraceFactory.getTrace ():

Výpis 6

// ... nejaký kód ... Trace log = new TraceFactory.getTrace (); // ... kód ... log.debug ("zadanie loogu"); // ... atď ... 

Použitie továrenskej metódy na získanie inštancie vám môže neskôr ušetriť veľa práce. V kóde vyššie TraceFactory vracia SystemTrace inštancie. Znova si predstavte, že sa vaše požiadavky zmenia a že svoje správy musíte napísať do súboru. Ak však na získanie svojej inštancie použijete továrenskú metódu, musíte v jednej triede vykonať iba jednu zmenu, aby ste splnili nové požiadavky. Nemusíte robiť zmeny v každej triede, ktorá používa Trace. Namiesto toho môžete jednoducho predefinovať getTrace ():

Výpis 7

public class TraceFactory {public static Trace getTrace () {try {return new FileTrace (); } catch (java.io.IOException ex) {Trace t = new SystemTrace (); t.error ("nepodarilo sa vytvoriť inštanciu FileTrace:" + ex.getMessage ()); návrat t; }}} 

Ďalej sa osvedčia továrenské metódy, keď si nie ste istí, ktorú konkrétnu implementáciu triedy vytvoriť. Namiesto toho môžete tieto podrobnosti nechať na továrenskú metódu.

V uvedených príkladoch váš program nevedel, či má vytvoriť FileTrace alebo SystemTrace inštancie. Namiesto toho môžete svoje objekty naprogramovať na jednoduché použitie Trace a ponechať inštanciu konkrétnej implementácie na továrenskú metódu.

Tony Sintes je hlavným konzultantom spoločnosti BroadVision. Sun-certifikovaný programátor Java 1.1 a vývojár Java 2, pracoval s Java od roku 1997.

Získajte viac informácií o tejto téme

  • Prvú zastávku pre všetky vaše potreby týkajúce sa vzorov nájdete v slávnej knihe Gang štvorkyDizajnové vzory, Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides (Addison-Wesley, 1995)

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

  • Chcieť viac? Viď Java Q&A index pre celý katalóg otázok a odpovedí

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

  • Viac ako 100 bystrých tipov pre jazyk Java od najlepších odborníkov v odbore nájdete na stránke JavaWorld 's Tipy pre Java index

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

  • Ďalšie články zamerané na nových programátorov Java nájdete na webe Úvodná úroveň časť JavaWorldAktuálny register

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

  • Hovorte v Java začiatočník diskusia

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

  • Prihláste sa na odber našich bezplatných tipov na programovanie v jazyku Java každý týždeň Java Tutor e-mailový spravodaj

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

Tento príbeh „Továrenské metódy“ pôvodne publikoval server JavaWorld.

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