Οι μέθοδοι κατασκευής στοιχείων χρησιμοποιούνται για την αναδημιουργία αντικειμένων μοντέλων από δεδομένα που αποθηκεύτηκαν κατά τον τερματισμό του πάγκου εργασίας.
Πριν μελετήσουμε προσεκτικά την επέκταση μεθόδου κατασκευής στοιχείων, πρέπει να εξετάσουμε μια γενική τεχνική που χρησιμοποιείται σε όλη την πλατφόρμα για την προσθήκη συμπεριφοράς ανάλογα με την πρόσθετη λειτουργία σε κοινά αντικείμενα μοντέλων πλατφόρμας.
Κατά την αναζήτηση των διαφόρων κλάσεων του πάγκου εργασίας, θα παρατηρήσετε ότι πολλές από τις διεπαφές του πάγκου εργασίας επεκτείνουν τη διεπαφή IAdaptable.
Οι πρόσθετες λειτουργίες χρησιμοποιούν προσαρμογείς για την προσθήκη συγκεκριμένης συμπεριφοράς σε προϋπάρχοντα είδη στο σύστημα. Για παράδειγμα, ο πάγκος εργασίας μπορεί να χρειάζεται πόρους για να απαντήσει σε μια ετικέτα και μια εικόνα για λόγους εμφάνισης. Γνωρίζουμε ότι δεν συνιστά καλή σχεδίαση η προσθήκη συγκεκριμένης συμπεριφοράς περιβάλλοντος χρήστη σε αντικείμενα χαμηλού επιπέδου, άρα πώς μπορούμε να προσθέσουμε αυτή τη συμπεριφορά στα είδη πόρων;
Οι πρόσθετες λειτουργίες μπορούν να καταχωρήσουν προσαρμογείς που προσθέτουν συμπεριφορά σε προϋπάρχοντα είδη. Ο κώδικας εφαρμογής μπορεί στη συνέχεια να υποβάλει ερώτημα σε ένα αντικείμενο για συγκεκριμένο προσαρμογέα. Εάν υπάρχει ένας καταχωρημένος για αυτόν, η εφαρμογή μπορεί να αποκτήσει τον προσαρμογέα και να χρησιμοποιήσει τις νέες συμπεριφορές που ορίζονται στον προσαρμογέα.
Παρέχοντας δυνατότητα δυναμικής υποβολής ερωτήματος σε προσαρμογέα για ένα αντικείμενο, μπορούμε να βελτιώσουμε την ευελιξία του συστήματος καθώς αυτό εξελίσσεται. Είναι δυνατή η καταχώρηση νέων προσαρμογέων για είδη πλατφόρμας από νέες πρόσθετες λειτουργίες χωρίς να πρέπει να αλλάξουν οι ορισμοί των αρχικών τύπων. Το μοτίβο για ερώτημα αντικειμένου για συγκεκριμένο προσαρμογέα έχει ως εξής:
//given an object o, we want to do "workbench" things with it. if (!(o instanceof IAdaptable)) { return null; } IWorkbenchAdapter adapter = (IWorkbenchAdapter)o.getAdapter(IWorkbenchAdapter.class); if (adapter == null) return null; // now I can treat o as an IWorkbenchAdapter ...
Εάν δεν υπάρχει καταχωρημένος προσαρμογέας για το εν λόγω αντικείμενο, ως προσαρμογέας θα επιστραφεί η τιμή null . Οι πελάτες πρέπει να είναι προετοιμασμένοι να χειριστούν αυτή την περίπτωση. Μπορεί να υπάρξουν περιπτώσεις μη καταχώρησης ενός αναμενόμενου προσαρμογέα.
Ο πάγκος εργασίας χρησιμοποιεί προσαρμογείς για να λάβει πληροφορίες περιβάλλοντος χρήστη από τα είδη βάσης πλατφόρμας, όπως IResource. Οι προσαρμογείς απαλλάσσουν τα είδη βάσης από γνώσεις σχετικά με το περιβάλλον χρήστη και επιτρέπουν στον πάγκο εργασίας να εξελίξει τις διεπαφές του χωρίς αλλαγή των ορισμών της βάσης.
Χωρίς προσαρμογείς, κάθε κλάση που μπορεί να μεταβιβασθεί στο ΑΡΙ του πάγκου εργασίας θα πρέπει να υλοποιεί τις διεπαφές περιβάλλοντος χρήστη, γεγονός που θα αυξήσει τον αριθμό των ορισμών κλάσης, θα εισάγει στενή σύνδεση και θα δημιουργήσει κυκλικές εξαρτήσεις μεταξύ των κλάσεων πυρήνα και περιβάλλοντος χρήστη. Με προσαρμογείς, κάθε κλάση υλοποιεί την IAdaptable και χρησιμοποιεί το μητρώο προσαρμογέα για να επιτρέψει σε πρόσθετες λειτουργίες να επεκτείνουν τη συμπεριφορά των ειδών βάσης.
Σε όλο τον κώδικα του πάγκου εργασίας, θα διαπιστώσετε περιπτώσεις όπου υποβάλλετε ερώτημα σε ένα είδος πυρήνα πλατφόρμας για προσαρμογέα. Το ερώτημα χρησιμοποιείται για την απόκτηση ενός αντικειμένου που γνωρίζει πώς να απαντήσει σε πληροφορίες προσανατολισμένες στο περιβάλλον χρήστη σχετικά με το είδος
Όταν ο πάγκος εργασίας τερματιστεί από το χρήστη, πρέπει να αποθηκεύσει την τρέχουσα κατάσταση των αντικειμένων IAdaptable που εμφανίζονται στον πάγκο εργασίας. Η αποθήκευση της κατάστασης ενός αντικειμένου πραγματοποιείται αποθηκεύοντας τις στοιχειωδεις παραμέτρους δεδομένων του αντικειμένου σε ειδική μορφή, μια IMemento. Αποθηκεύεται επίσης η μέθοδος κατασκευής που μπορεί να αναδημιουργήσει το αντικείμενο από μια IMemento και τα δεδομένα στο σύστημα αρχείων.
Κατά την επανεκκίνηση της πλατφόρμας, ο πάγκος εργασίας βρίσκει τη μέθοδο κατασκευής στοιχείων που είναι συσχετισμένη με την ταυτότητα μεθόδου κατασκευής της IMemento. Βρίσκει τη μέθοδο κατασκευής ελέγχοντας το μητρώο της πρόσθετης λειτουργίας για συνεισφορές στην επέκταση org.eclipse.ui.elementFactories.
Η μορφοποίηση είναι αρκετά απλή. Πρέπει μόνο να προσδιορίσουμε την ταυτότητα της μεθόδου κατασκευής και την αντίστοιχη κλάση που υλοποιεί η μέθοδος κατασκευής.
Το ακόλουθο τμήμα κώδικα προέρχεται από το αρχείο plugin.xml του πάγκου εργασίας.
<extension point="org.eclipse.ui.elementFactories"> <factory class="org.eclipse.ui.internal.model.ResourceFactory" id="org.eclipse.ui.internal.model.ResourceFactory"> </factory> <factory class="org.eclipse.ui.internal.model.WorkspaceFactory" id="org.eclipse.ui.internal.model.WorkspaceFactory"> </factory> <factory class="org.eclipse.ui.part.FileEditorInputFactory" id="org.eclipse.ui.part.FileEditorInputFactory"> </factory> <factory class="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory" id="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory"> </factory> <factory class="org.eclipse.ui.internal.WorkingSetFactory" id="org.eclipse.ui.internal.WorkingSetFactory"> </factory> </extension>