Τα 7 πιο σημαντικά σχέδια σχεδίασης λογισμικού

Για μια ολοκληρωμένη βαθιά κατάδυση στο θέμα των Σχεδίων Σχεδίασης Λογισμικού, ανατρέξτε στα Πρότυπα Σχεδιασμού Λογισμικού: Βέλτιστες Πρακτικές για τους Προγραμματιστές, που δημιουργήθηκε από τον C.H. Afzal, ένας παλαίμαχος μηχανικός λογισμικού με πολυετή εμπειρία σε Netflix, Microsoft και Oracle. Πολλά από τα παρακάτω συνοψίζονται από την πορεία του.

Γιατί μοτίβα σχεδίασης;

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

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

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

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

Χωρίς περαιτέρω ελιγμούς (σε γενική σειρά σπουδαιότητας, από το μεγαλύτερο έως το λιγότερο):

Τα πιο σημαντικά σχέδια μοτίβα

  1. Μοναδικό χαρτί

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

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

Σημαντική παρατήρηση: Είναι δυνατή η υποκλάση ενός singleton κάνοντας τον κατασκευαστή προστατευμένο αντί για ιδιωτικό. Αυτό μπορεί να είναι κατάλληλο σε ορισμένες περιπτώσεις. Μια προσέγγιση που ακολουθείται σε αυτά τα σενάρια είναι η δημιουργία ενός μητρώου singletons των υποκατηγοριών και η μέθοδος getInstance μπορεί να πάρει μια παράμετρο ή να χρησιμοποιήσει μια μεταβλητή περιβάλλοντος για να επιστρέψει το επιθυμητό singleton. Στη συνέχεια, το μητρώο διατηρεί μια αντιστοίχιση των ονομάτων συμβολοσειρών σε αντικείμενα singleton, τα οποία μπορούν να προσπελαστούν ανάλογα με τις ανάγκες.

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

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

Συνήθως, η δημιουργία αντικειμένων στην Java λαμβάνει χώρα ως εξής:

Κάποια κλάση someClassObject = newClassClass ();

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

3. Στρατηγική

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

4. Παρατηρητής

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

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

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

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

5. Builder

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

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

6. Προσαρμογέας

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

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

7. Κράτος

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

Θέλετε να συνεχίσετε να μαθαίνετε;

Με μοτίβα σχεδιασμού λογισμικού: Βέλτιστες πρακτικές για προγραμματιστές θα έχετε την ευκαιρία να κάνετε περισσότερα από ό, τι διαβάζετε μόνο τη θεωρία. Θα είστε σε θέση να βουτήξετε βαθιά σε πραγματικά προβλήματα και να κατανοήσετε πρακτικές λύσεις με παραδείγματα κώδικα πραγματικού βίου.

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

Ελέγξτε το τώρα.

Αρχικά δημοσιεύθηκε στο blog.educative.io στις 7 Νοεμβρίου 2018.