Προγραμματισμός

Εργοστασιακές μέθοδοι

Ε: Ενώ περνούσα από τον «Πολυμορφισμό στην πιο αγνή του μορφή», είδα τον άγνωστο όρο εργοστασιακή μέθοδο. Μπορείτε να περιγράψετε τι είναι μια εργοστασιακή μέθοδος και να εξηγήσετε πώς μπορώ να τη χρησιμοποιήσω;

ΕΝΑ: Ας δούμε ένα παράδειγμα.

Κάθε πρόγραμμα χρειάζεται έναν τρόπο αναφοράς σφαλμάτων. Εξετάστε την ακόλουθη διεπαφή:

Λίστα 1

δημόσια διεπαφή Trace {// ενεργοποίηση και απενεργοποίηση του εντοπισμού σφαλμάτων public void setDebug (boolean debug). // γράψτε ένα μήνυμα εντοπισμού σφαλμάτων δημόσιο κενό εντοπισμού σφαλμάτων (String message). // γράψτε ένα μήνυμα σφάλματος δημόσιο άκυρο σφάλμα (String message). } 

Ας υποθέσουμε ότι έχετε γράψει δύο υλοποιήσεις. Μία εφαρμογή (Λίστα 2) γράφει τα μηνύματα στη γραμμή εντολών, ενώ μια άλλη (Λίστα 3) τα γράφει σε ένα αρχείο.

Λίστα 2

δημόσια τάξη FileTrace εφαρμόζει Trace {private java.io.PrintWriter pw; ιδιωτικό bugean debug; δημόσιο FileTrace () ρίχνει java.io.IOException {// ένα πραγματικό FileTrace θα χρειαστεί να αποκτήσει το όνομα αρχείου κάπου // για παράδειγμα, θα το κωδικοποιήσω pw = new java.io.PrintWriter (νέο java.io.FileWriter (" c: \ trace.log ")); } public void setDebug (boolean debug) {this.debug = debug; } δημόσιο σφάλμα εντοπισμού σφαλμάτων (μήνυμα συμβολοσειράς) {if (εντοπισμός σφαλμάτων) {// εκτύπωση μόνο εάν το σφάλμα εντοπισμού είναι πραγματικό pw.println ("DEBUG:" + message); pw.flush (); }} σφάλμα δημόσιου κενού (μήνυμα συμβολοσειράς) {// πάντα εκτύπωση σφαλμάτων pw.println ("ΣΦΑΛΜΑ:" + μήνυμα); pw.flush (); }} 

Λίστα 3

Η δημόσια κλάση SystemTrace εφαρμόζει Trace {ιδιωτικό boolean debug; public void setDebug (boolean debug) {this.debug = debug; } δημόσιο σφάλμα εντοπισμού σφαλμάτων (μήνυμα συμβολοσειράς) {if (εντοπισμός σφαλμάτων) {// εκτυπώστε μόνο εάν ο εντοπισμός σφαλμάτων είναι πραγματικός }} σφάλμα δημόσιου κενού (μήνυμα συμβολοσειράς) {// πάντα εκτύπωση σφαλμάτων System.out.println ("ΣΦΑΛΜΑ:" + μήνυμα); }} 

Για να χρησιμοποιήσετε οποιαδήποτε από αυτές τις τάξεις, θα πρέπει να κάνετε τα εξής:

Λίστα 4

// ... κάποιος κωδικός ... SystemTrace log = νέο SystemTrace (); // ... κωδικός ... log.debug ("είσοδος loog"); // ... και τα λοιπά ... 

Τώρα αν θέλετε να αλλάξετε το Ιχνος εφαρμογή που χρησιμοποιεί το πρόγραμμά σας, θα πρέπει να επεξεργαστείτε κάθε τάξη που δημιουργεί ένα Ιχνος εκτέλεση. Ανάλογα με τον αριθμό των τάξεων που χρησιμοποιούν Ιχνος, μπορεί να χρειαστεί πολλή δουλειά για να κάνετε την αλλαγή. Επιπλέον, θέλετε να αποφύγετε όσο το δυνατόν περισσότερες αλλαγές στα μαθήματά σας.

Μια εργοστασιακή μέθοδος μας επιτρέπει να είμαστε πολύ πιο έξυπνοι για το πώς αποκτούν τα μαθήματά μας Ιχνος παρουσίες υλοποίησης:

Λίστα 5

δημόσια τάξη TraceFactory {public static Trace getTrace () {return new SystemTrace (); }} 

getTrace () είναι μια εργοστασιακή μέθοδος. Τώρα, όποτε θέλετε να λάβετε μια αναφορά σε ένα Ιχνος, μπορείτε απλά να καλέσετε TraceFactory.getTrace ():

Λίστα 6

// ... κάποιος κωδικός ... Trace log = νέο TraceFactory.getTrace (); // ... κωδικός ... log.debug ("είσοδος loog"); // ... και τα λοιπά ... 

Η χρήση μιας εργοστασιακής μεθόδου για τη λήψη μιας παρουσίας μπορεί να σας εξοικονομήσει πολλή δουλειά αργότερα. Στον παραπάνω κώδικα, TraceFactory επιστρέφει Σύστημα παρακολούθησης περιπτώσεις. Φανταστείτε ξανά ότι οι απαιτήσεις σας αλλάζουν και ότι πρέπει να γράψετε τα μηνύματά σας σε ένα αρχείο. Ωστόσο, εάν χρησιμοποιείτε μια εργοστασιακή μέθοδο για να λάβετε την παρουσία σας, πρέπει να κάνετε μόνο μία αλλαγή σε μία τάξη για να ικανοποιήσετε τις νέες απαιτήσεις. Δεν χρειάζεται να κάνετε αλλαγές σε κάθε τάξη που χρησιμοποιεί Ιχνος. Αντ 'αυτού, μπορείτε απλά να επαναπροσδιορίσετε getTrace ():

Λίστα 7

δημόσια τάξη TraceFactory {public static Trace getTrace () {δοκιμάστε {επιστροφή νέου FileTrace (); } catch (java.io.IOException ex) {Trace t = νέο SystemTrace (); t.error ("δεν ήταν δυνατή η εγκατάσταση του FileTrace:" + ex.getMessage ()); επιστροφή t; }}} 

Επιπλέον, οι εργοστασιακές μέθοδοι αποδεικνύονται χρήσιμες όταν δεν είστε βέβαιοι ποια συγκεκριμένη εφαρμογή μιας κλάσης πρέπει να δημιουργήσετε. Αντ 'αυτού, μπορείτε να αφήσετε αυτές τις λεπτομέρειες στην εργοστασιακή μέθοδο.

Στα παραπάνω παραδείγματα το πρόγραμμά σας δεν ήξερε αν θα δημιουργήσει FileTrace ή Σύστημα παρακολούθησης περιπτώσεις. Αντ 'αυτού, μπορείτε να προγραμματίσετε τα αντικείμενά σας για απλή χρήση Ιχνος και αφήστε το παράδειγμα της συγκεκριμένης εφαρμογής σε μια εργοστασιακή μέθοδο.

Ο Tony Sintes είναι κύριος σύμβουλος της BroadVision. Ένας προγραμματιστής Java 1.1 πιστοποιημένος από την Sun και προγραμματιστής Java 2, συνεργάζεται με την Java από το 1997.

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Η πρώτη στάση για όλες τις ανάγκες μοτίβου μπορείτε να βρείτε στο διάσημο βιβλίο του Gang of FourΣχεδιαστικά πρότυπα, Eric Gamma, Richard Helm, Ralph Johnson, John Vlissides (Addison-Wesley, 1995)

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

  • Θέλουν περισσότερα? Δείτε το Ε & Α Java ευρετήριο για τον πλήρη κατάλογο ερωτήσεων και απαντήσεων

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

  • Για περισσότερες από 100 διορατικές συμβουλές Java από μερικά από τα καλύτερα μυαλά στην επιχείρηση, επισκεφτείτε JavaWorld 'μικρό Συμβουλές Java δείκτης

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

  • Για περισσότερα άρθρα που απευθύνονται σε νέους προγραμματιστές Java, επισκεφτείτε το Εισαγωγικό επίπεδο τμήμα του JavaWorldΤοπικό ευρετήριο

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

  • Μιλήστε στο Αρχάριος Java συζήτηση

    //www.itworld.com/jump/jw-javaqa/forums.itworld.com/[email protected]@.ee6b804/1195!skip=1125

  • Λάβετε εβδομαδιαίες συμβουλές προγραμματισμού Java εγγραφόμενοι δωρεάν Εκπαιδευτής Java ενημερωτικό δελτίο ηλεκτρονικού ταχυδρομείου

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

Αυτή η ιστορία, "Εργοστασιακές μέθοδοι" δημοσιεύθηκε αρχικά από την JavaWorld.