Programiranje

Tovarniške metode

V: Med "polimorfizmom v najčistejši obliki" sem videl neznan izraz tovarniške metode. Ali lahko opišete, kaj je tovarniška metoda, in razložite, kako jo lahko uporabim?

A: Oglejmo si primer.

Vsak program potrebuje način za poročanje o napakah. Upoštevajte naslednji vmesnik:

Seznam 1

javni vmesnik Trace {// vklop in izklop odpravljanja napak public void setDebug (logična odpravljanje napak); // zapišemo sporočilo o odpravljanju napak public void debug (String message); // izpišemo sporočilo o napaki public void error (niz sporočila); } 

Recimo, da ste napisali dve izvedbi. Ena izvedba (seznam 2) zapisuje sporočila v ukazno vrstico, druga (seznam 3) pa jih zapisuje v datoteko.

Seznam 2

javni razred FileTrace izvaja Trace {private java.io.PrintWriter pw; zasebno logično odpravljanje napak; public FileTrace () vrže java.io.IOException {// resnični FileTrace bi moral nekje pridobiti ime datoteke // za primer ga bom trdo kodiral pw = new java.io.PrintWriter (new java.io.FileWriter (" c: \ trace.log ")); } javna void setDebug (logična napaka) {this.debug = debug; } javna void odpravljanje napak (sporočilo v nizu) {if (odpravljanje napak) {// tiskanje samo, če je odpravljanje napak resnično pw.println ("DEBUG:" + sporočilo); pw.flush (); }} public void error (niz sporočila) {// vedno izpiši napake pw.println ("ERROR:" + message); pw.flush (); }} 

Seznam 3

javni razred SystemTrace izvaja Trace {zasebno logično odpravljanje napak; javna void setDebug (logična odpravljanje napak) {this.debug = debug; } javna razveljavitev neveljavnosti (sporočilo v nizu) {if (odpravljanje napak) {// tiskanje samo, če je odpravljanje napak resnično System.out.println ("DEBUG:" + sporočilo); }} javna napaka void (sporočilo v nizu) {// vedno izpiši napake System.out.println ("ERROR:" + sporočilo); }} 

Če želite uporabiti katerega koli od teh razredov, morate narediti naslednje:

Seznam 4

// ... nekaj kode ... SystemTrace log = new SystemTrace (); // ... koda ... log.debug ("vnos dnevnika"); // ... itd ... 

Zdaj, če želite spremeniti Sledi izvajanje, ki ga uporablja vaš program, boste morali urediti vsak razred, ki ustvari a Sledi izvajanje. Odvisno od števila razredov, ki jih uporabljajo Sledi, za spremembo boste morda potrebovali veliko dela. Poleg tega se želite izogniti čim večjemu spreminjanju predavanj.

Tovarniška metoda nam omogoča, da smo veliko pametnejši pri pridobivanju predavanj Sledi primeri izvedbe:

Seznam 5

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

getTrace () je tovarniška metoda. Zdaj, kadar koli želite pridobiti sklic na Sledi, lahko preprosto pokličete TraceFactory.getTrace ():

Seznam 6

// ... nekaj kode ... Dnevnik sledenja = nov TraceFactory.getTrace (); // ... koda ... log.debug ("vnos dnevnika"); // ... itd ... 

Uporaba tovarniške metode za pridobitev primerka vam lahko kasneje prihrani veliko dela. V zgornji kodi je TraceFactory vrne SystemTrace primerov. Znova si predstavljajte, da se vaše zahteve spreminjajo in da morate svoja sporočila zapisati v datoteko. Če pa za pridobitev primerka uporabljate tovarniško metodo, morate v enem razredu narediti samo eno spremembo, da izpolnite nove zahteve. V vsakem razredu, ki uporablja, vam ni treba spreminjati Sledi. Namesto tega lahko preprosto na novo določite getTrace ():

Seznam 7

javni razred TraceFactory {public static Trace getTrace () {try {return new FileTrace (); } catch (java.io.IOException ex) {Trace t = new SystemTrace (); t.error ("ni bilo mogoče ustvariti primerka FileTrace:" + ex.getMessage ()); vrnitev t; }}} 

Poleg tega se tovarniške metode izkažejo za koristne, če niste prepričani, kakšno konkretno izvedbo razreda bi ustvarili. Namesto tega lahko te podatke prepustite tovarniški metodi.

V zgornjih primerih vaš program ni vedel, ali naj ustvari FileTrace ali SystemTrace primerov. Namesto tega lahko svoje programe programirate tako, da jih preprosto uporabite Sledi in primerek konkretne izvedbe prepustite tovarniški metodi.

Tony Sintes je glavni svetovalec pri BroadVision. Programer Java 1.1 in razvijalec Java 2 s certifikatom Sun, z Javo sodeluje od leta 1997.

Preberite več o tej temi

  • Prvi postanek za vse vaše potrebe po vzorcih najdete v znameniti knjigi Gang of FourOblikovalski vzorci, Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides (Addison-Wesley, 1995)

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

  • Želijo več? Glej Vprašanja in odgovori o Javi indeks za celoten katalog Vprašanj

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

  • Obiščite več kot 100 vpoglednih nasvetov Java nekaterih najboljših mož v poslu JavaWorld 's Java Nasveti indeks

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

  • Za več člankov, namenjenih novim programerjem Java, obiščite Uvodna raven odsek JavaWorldAktualni indeks

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

  • Govori v Začetnik Java diskusija

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

  • Prejemajte tedenske nasvete za programiranje Java, tako da se naročite na našo brezplačno Vaditelj Java e-novice

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

To zgodbo "Tovarniške metode" je prvotno objavil JavaWorld.

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