Το Pattern Design Observer είναι κάπως σαν ένα podcast

Εάν ακούτε τα podcasts, γνωρίζετε ήδη το πρότυπο Observer. Στην πραγματικότητα, είστε "παρατηρητής".

Ακολουθεί ο ορισμός του προτύπου Observer:

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

Ας δούμε τον ορισμό ως σχετικό με τα podcasts.

Βρήκα ένα ενδιαφέρον podcast με την ονομασία τσάι προγραμματιστή.

Αφού κάνετε κλικ στο κουμπί SUBSCRIBE, είμαι τώρα στη λίστα των συνδρομητών τους.

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

Αυτός είναι ακριβώς ο ορισμός του μοτίβου Observer!

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

Υπάρχει μια σχέση μεταξύ των προγραμματιστών podcast τσαγιού και των συνδρομητών.

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

Ας το εφαρμόσουμε στο Ruby.

Ξεκινήστε με μια απλή έκδοση.

Η κλάση Podcast περιέχει μια λίστα επεισοδίων και έχει μια μέθοδο add_episode στη λίστα.

Στη συνέχεια, μπορούμε να δημιουργήσουμε το podcast του developer_tea και να προσθέσουμε το επεισόδιο # 1 σε αυτό ως εξής:

Θέλω να λαμβάνω ειδοποίηση κάθε φορά που κυκλοφορεί ένα νέο επεισόδιο.

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

Και όποτε έχω μια ενημέρωση από την developer_tea, μπορώ να προχωρήσω και να κατεβάσω το τελευταίο επεισόδιο.

Μου αρέσει να ακούω τον developer_tea τόσο πολύ που το συνιστώ στον φίλο μου, Amber. Τώρα, η Amber θέλει να εγγραφεί σε αυτήν επίσης.

Πρέπει να βεβαιωθούμε ότι η Amber λαμβάνει επίσης ειδοποίηση κάθε φορά που κυκλοφορεί ένα νέο επεισόδιο:

Χμμμ, αυτός ο κώδικας κάνει αυτό που θέλουμε.

Υπάρχει όμως πρόβλημα.

Κάθε φορά που θέλουμε να προσθέσουμε έναν συνδρομητή, πρέπει να επαναπροσδιορίσουμε την τάξη.

Υπάρχει τρόπος ενημέρωσης της λίστας συνδρομητών χωρίς να χρειάζεται να επαναπροσδιορίσετε την κλάση;

Μπορούμε να κρατήσουμε μια λίστα συνδρομητών!

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

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

Yay! Μόλις μάθατε το μοτίβο του παρατηρητή!

Αρχή σχεδιασμού πίσω από το μοτίβο παρατηρητή.

Το πρότυπο Observer χρησιμοποιεί την αρχή σχεδιασμού Loose Coupling:

Προσπαθήστε για χαλαρά συζευγμένα σχέδια μεταξύ αντικειμένων που αλληλεπιδρούν.

Η τάξη Podcast δεν γνωρίζει πολλά για τους συνδρομητές της. Γνωρίζει μόνο ότι κάθε συνδρομητής διαθέτει μια μέθοδο ενημέρωσης.

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

Takeaways:

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

Ευχαριστώ για την ανάγνωση. Υπάρχουν άλλα παραδείγματα της πραγματικής ζωής του σχεδίου Observer που μπορείτε να σκεφτείτε;

Δημοσιεύω στο sihui.io κάθε εβδομάδα.

Εγγραφείτε έτσι ώστε να μην χάσετε το επόμενο άρθρο από τη σειρά.

Την επόμενη φορά θα μιλήσουμε για ...