Programmēšana

Rūpnīcas metodes

J: Pārdzīvojot “Polimorfismu tīrā veidā”, es redzēju nepazīstamo terminu “rūpnīcas metode”. Lūdzu, aprakstiet, kas ir rūpnīcas metode, un paskaidrojiet, kā es to varu izmantot?

A: Apskatīsim piemēru.

Katrai programmai ir nepieciešams veids, kā ziņot par kļūdām. Apsveriet šādu saskarni:

Saraksts 1

publiskā saskarne Trace {// ieslēgt un izslēgt atkļūdošanu public void setDebug (būla atkļūdošana); // izrakstīt atkļūdošanas ziņojumu public void debug (String message); // izrakstīt kļūdas ziņojumu public void error (virknes ziņojums); } 

Pieņemsim, ka esat uzrakstījis divas realizācijas. Viena ieviešana (2. saraksts) izraksta ziņojumus komandrindā, bet otra (3. saraksts) tos raksta failā.

2. saraksts

publiskā klase FileTrace ievieš Trace {private java.io.PrintWriter pw; privāta būla atkļūdošana; public FileTrace () izmet java.io.IOException {// īstai FileTrace būtu jāiegūst faila nosaukums kaut kur // piemēram, es to cieto kodu pw = new java.io.PrintWriter (new java.io.FileWriter (" c: \ trace.log ")); } public void setDebug (būla atkļūdošana) {this.debug = atkļūdošana; } public void debug (virknes ziņojums) {if (atkļūdot) {// drukāt tikai tad, ja atkļūdošana ir patiesa pw.println ("DEBUG:" + ziņojums); pw.skalot (); }} public void error (virknes ziņojums) {// vienmēr izdrukā kļūdas pw.println ("ERROR:" + ziņojums); pw.skalot (); }} 

3. saraksts

publiskā klase SystemTrace ievieš Trace {private boolean debug; public void setDebug (būla atkļūdošana) {this.debug = atkļūdošana; } public void debug (virknes ziņojums) {if (atkļūdot) {// drukāt tikai tad, ja atkļūdošana ir patiesa System.out.println ("DEBUG:" + ziņojums); }} public void error (virknes ziņojums) {// vienmēr izdrukāt kļūdas System.out.println ("ERROR:" + ziņojums); }} 

Lai izmantotu kādu no šīm klasēm, jums jāveic šādas darbības:

4. saraksts

// ... daži kodi ... SystemTrace žurnāls = new SystemTrace (); // ... kods ... log.debug ("ievadot loog"); // ... utt. 

Tagad, ja vēlaties mainīt Izsekot ieviešanu, kuru izmanto jūsu programma, jums būs jārediģē katra klase, kas a Izsekot ieviešana. Atkarībā no izmantoto klašu skaita Izsekot, lai veiktu izmaiņas, var būt nepieciešams daudz darba. Turklāt jūs vēlaties pēc iespējas izvairīties no klases maiņas.

Rūpnīcas metode ļauj mums būt daudz gudrākiem par to, kā mūsu klases iegūst Izsekot ieviešanas gadījumi:

5. saraksts

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

getTrace () ir rūpnīcas metode. Tagad, kad vēlaties iegūt atsauci uz a Izsekot, jūs varat vienkārši piezvanīt TraceFactory.getTrace ():

6. saraksts

// ... daži kodi ... Trace log = new TraceFactory.getTrace (); // ... kods ... log.debug ("ievadot loog"); // ... utt. 

Izmantojot rūpnīcas metodi, lai iegūtu instanci, vēlāk varēsiet ietaupīt daudz darba. Iepriekš redzamajā kodā TraceFactory atgriežas SystemTrace gadījumi. Vēlreiz iedomājieties, ka jūsu prasības mainās un ka jums ir jāizraksta ziņojumi failā. Tomēr, ja instances iegūšanai izmantojat rūpnīcas metodi, vienā klasē jāveic tikai viena izmaiņa, lai izpildītu jaunās prasības. Jums nav jāveic izmaiņas visās klasēs, kuras izmanto Izsekot. Tā vietā jūs varat vienkārši no jauna definēt getTrace ():

7. saraksts

public class TraceFactory {public static Trace getTrace () {try {return new FileTrace (); } catch (java.io.IOException ex) {Trace t = jauna SystemTrace (); t.error ("Nevarēja instantizēt FileTrace:" + ex.getMessage ()); atgriešanās t; }}} 

Turklāt rūpnīcas metodes izrādās noderīgas, ja neesat pārliecināts par konkrētu klases ieviešanu. Tā vietā jūs varat atstāt šīs detaļas rūpnīcas metodei.

Iepriekš minētajos piemēros jūsu programma nezināja, vai izveidot FileTrace vai SystemTrace gadījumi. Tā vietā jūs varat ieprogrammēt savus objektus vienkārši izmantot Izsekot un atstājiet konkrētā ieviešanas momentānošanu rūpnīcas metodei.

Tonijs Sintess ir galvenais BroadVision konsultants. Viņš ir Sun sertificēts Java 1.1 programmētājs un Java 2 izstrādātājs un strādā ar Java kopš 1997. gada.

Uzziniet vairāk par šo tēmu

  • Pirmā pietura visām jūsu modeļa vajadzībām ir atrodama slavenajā četru bandu grāmatāDizaina raksti, Ēriks Gamma, Ričards Helms, Ralfs Džonsons, Džons Vlisīds (Addison-Wesley, 1995)

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

  • Vēlas vairāk? Skatīt Java jautājumi un atbildes rādītājs visam jautājumu un atbilžu katalogam

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

  • Lai iegūtu vairāk nekā 100 ieskatīgus Java padomus no labākajiem biznesa prātiem, apmeklējiet vietni JavaWorld 's Java padomi indekss

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

  • Lai iegūtu vairāk rakstu, kas paredzēti jauniem Java programmētājiem, apmeklējiet vietni Ievads sadaļa JavaWorldaktuālais rādītājs

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

  • Runājiet Java iesācējs diskusija

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

  • Katru nedēļu saņemiet Java programmēšanas padomus, abonējot mūsu bezmaksas Java pasniedzējs e-pasta biļetens

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

Šo stāstu “Rūpnīcas metodes” sākotnēji publicēja JavaWorld.

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