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.
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.