Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών.

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

Κάθε βήμα του αλγορίθμου που ορίζει η μέθοδος προτύπου είναι μια εσωτερική μέθοδος. Ωστόσο, η μέθοδος προτύπου χειρίζεται μόνο την υλοποίηση ορισμένων από τις εσωτερικές μεθόδους της. Οι υποκλάσεις συνήθως υλοποιούν μία ή περισσότερες από τις εσωτερικές μεθόδους της μεθόδου προτύπου.

Μια υποκλάση μπορεί να εφαρμόσει μια αφηρημένη μέθοδο, αλλά δεν μπορεί να επαναπροσδιορίσει τον αλγόριθμο που εφαρμόζεται από μια τελική μέθοδο.

Πώς λειτουργεί η μέθοδος προτύπου

Ένα τυπικό μοτίβο μεθόδου προτύπου θα έχει την ακόλουθη δομή:

τελικόςκενόςtemplateMethod(){
abstractOperation1();
abstractOperation2();

konkretOperation1();
konkretOperation2();

άγκιστρο();
}

Το πρώτο σημαντικό πράγμα που πρέπει να σημειωθεί είναι ότι το templateMethod() είναι τελικό, επομένως καμία υποκλάση δεν μπορεί να παρακάμψει αυτήν τη μέθοδο. Το άλλο σημαντικό πράγμα που πρέπει να σημειωθεί είναι οι τρεις τύποι μεθόδων που χρησιμοποιεί το μοτίβο μεθόδου προτύπου: συγκεκριμένο, αφηρημένο και άγκιστρο.

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

Εφαρμογή του μοτίβου μεθόδου προτύπου σε Java

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

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

δημόσιοαφηρημένητάξηΒάση δεδομένων{
// μέθοδος προτύπου
τελικόςκενόςΠρότυπο βάσης δεδομένων(){
// αφηρημένες μέθοδοι
setDBDriver();
setCredentials();

// συγκεκριμένη μέθοδος
συνδέω-συωδεομαι();

// αφηρημένες μέθοδοι
createDB();
setData();
readData();

// μέθοδοι αγκίστρωσης
if (userWantsToUpdate()) {
updateData();
}

if (userWantsToDelete()) {
deleteData();
}

// συγκεκριμένη μέθοδος
closeConnection();
}

αφηρημένηκενόςsetDBDriver();
αφηρημένηκενόςsetCredentials();
αφηρημένηκενόςcreateDB();
αφηρημένηκενόςsetData();
αφηρημένηκενόςreadData();
αφηρημένηκενόςενημέρωση Δεδομένων();
αφηρημένηκενόςδιαγραφή Δεδομένων();

κενόςσυνδέω-συωδεομαι(){
System.out.println("Σύνδεση στη βάση δεδομένων...");
}

κενόςστενήΣύνδεση(){
System.out.println("Καταστροφή σύνδεσης βάσης δεδομένων...");
}

booleanχρήστηWantsToUpdate(){
ΕΠΙΣΤΡΟΦΗψευδής;
}

booleanχρήστηWantsToDelete(){
ΕΠΙΣΤΡΟΦΗψευδής;
}
}

Αυτό το παράδειγμα κλάσης βάσης δεδομένων χρησιμοποιεί το μοτίβο μεθόδου προτύπου για να δημιουργήσει ένα πρότυπο που μπορείτε να χρησιμοποιήσετε με οποιαδήποτε βάση δεδομένων. Για να χρησιμοποιήσετε μια βάση δεδομένων, η εφαρμογή σας θα πρέπει να συνδεθεί σε αυτήν και στη συνέχεια να καταστρέψει τη σύνδεση μετά τη χρήση. Αυτές οι δραστηριότητες είναι συνήθως ίδιες για όλες τις βάσεις δεδομένων. Επομένως, η κλάση αφηρημένης βάσης δεδομένων μπορεί να υλοποιήσει το συνδέω-συωδεομαι() και closeConnection() μεθόδους.

Οι άλλες μέθοδοι στη μέθοδο προτύπου θα διαφέρουν ανάλογα με τον τύπο της βάσης δεδομένων. Για παράδειγμα, μια βάση δεδομένων MySQL αποθηκεύει δεδομένα σε πίνακες, ενώ α Η βάση δεδομένων MongoDB αποθηκεύει δεδομένα σε συλλογές. Εάν θέλετε να χρησιμοποιήσετε α Βάση δεδομένων MySQL σε Java, απλώς δημιουργήστε μια νέα κλάση MySQL που επεκτείνει την κλάση της βάσης δεδομένων:

δημόσιοτάξηMySQLεκτείνεταιΒάση δεδομένων{
@Καταπατώ
κενόςsetDBDriver(){
System.out.println("Επιλογή προγράμματος οδήγησης MySQL...");
}

@Καταπατώ
κενόςsetCredentials(){
System.out.println("Ρύθμιση διαπιστευτηρίων βάσης δεδομένων MySQL...");
}

@Καταπατώ
κενόςcreateDB(){
System.out.println("Δημιουργία νέου πίνακα...");
}

@Καταπατώ
κενόςsetData(){
System.out.println("Εισαγωγή δεδομένων στη βάση δεδομένων...");
}

@Καταπατώ
κενόςreadData(){
System.out.println("Ανάκτηση δεδομένων από βάση δεδομένων...");
}

@Καταπατώ
κενόςενημέρωση Δεδομένων(){
System.out.println("Ενημέρωση δεδομένων στη βάση δεδομένων...");
}

@Καταπατώ
κενόςδιαγραφή Δεδομένων(){
System.out.println("Διαγραφή δεδομένων από τη βάση δεδομένων...");
}
}

Η κλάση MySQL υλοποιεί όλες τις αφηρημένες μεθόδους της κλάσης Database. Μπορεί επίσης να παρακάμψει ορισμένες συγκεκριμένες μεθόδους. Ωστόσο, δεν μπορεί να αγγίξει το databaseTemplate() μέθοδο, η οποία χρησιμοποιεί την τελική λέξη-κλειδί.

δημόσιοτάξηΚύριος{
δημόσιοστατικόςκενόςκύριος(String[] args){
Βάση δεδομένων mySQLDB = νέος MySQL();
mySQLDB.databaseTemplate();
}
}

Αυτή η κλάση Main δημιουργεί ένα νέο αντικείμενο βάσης δεδομένων MySQL και χρησιμοποιεί τη μέθοδο προτύπου για να προσομοιώσει τον τρόπο σύνδεσης μιας εφαρμογής στη βάση δεδομένων. Η εκτέλεση της κύριας μεθόδου εκτυπώνει την ακόλουθη έξοδο στην κονσόλα:

Στην έξοδο, θα παρατηρήσετε ότι η εφαρμογή δεν καλεί ποτέ το updateData() και deleteData() μεθόδους. Αυτός είναι ο λόγος για τον οποίο οι μέθοδοι αγκίστρωσης είναι σημαντικές. Σε μια βάση δεδομένων SQL, θα θέλετε να δημιουργήσετε νέους πίνακες, να εισαγάγετε δεδομένα και να προβάλετε τα δεδομένα σας. Ωστόσο, ενδέχεται να μην θέλετε να ενημερώσετε ή να διαγράψετε δεδομένα. Επομένως, οι μέθοδοι hook δίνουν στις υποκλάσεις την επιλογή να ελέγχουν αυτές τις κρίσιμες πτυχές του αλγορίθμου.

@Καταπατώ
booleanχρήστηWantsToUpdate(){
ΕΠΙΣΤΡΟΦΗαληθής;
}

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

Όπως μπορείτε να δείτε, η εφαρμογή ενημερώνει τώρα τα δεδομένα στη βάση δεδομένων.

Τα πλεονεκτήματα της χρήσης του μοτίβου σχεδίασης της μεθόδου προτύπου

Ένα σημαντικό πλεονέκτημα του προτύπου μεθόδου προτύπου είναι ότι προωθεί την επαναχρησιμοποίηση λογισμικού. Αυτό το σχέδιο σχεδίασης υποστηρίζει επίσης αποτελεσματικό προγραμματισμό. Μια υποκλάση χρειάζεται μόνο να εφαρμόσει μεθόδους που είναι μοναδικές στη λειτουργία της.

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