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

Πώς να εργαστείτε με το σχέδιο του Διακοσμητή στο C #

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

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

Σημειώστε ότι το σχέδιο του Διακοσμητή ακολουθεί την Ανοιχτή Αρχή, μία από τις αρχές SOLID. Παρεμπιπτόντως, το Open Closed Principle χρησιμοποιείται για το σχεδιασμό τάξεων που είναι ανοιχτές για επεκτάσεις αλλά κλειστές για τροποποιήσεις. Η συμμόρφωση με το Open Closed Principle διευκολύνει την κατασκευή εφαρμογών που είναι επαναχρησιμοποιήσιμες και μπορούν να διατηρηθούν εύκολα. Η συμμορία των τεσσάρων (GOF) στο Dofactory δηλώνει: "Προσθέστε δυναμικά πρόσθετες ευθύνες σε ένα αντικείμενο. Οι διακοσμητές παρέχουν μια ευέλικτη εναλλακτική λύση στην υποκατηγορία για την επέκταση της λειτουργικότητας."

Λίγο κώδικα

Σε αυτήν την ενότητα θα διερευνήσουμε πώς μπορούμε να εφαρμόσουμε το σχέδιο του Διακοσμητή στο C #. Οι συμμετέχοντες σε μια τυπική εφαρμογή του σχεδιασμού του Διακοσμητή περιλαμβάνουν:

  1. Component - αντιπροσωπεύει τον βασικό τύπο του πραγματικού ή του σκυροδέματος
  2. Component Component - αντιπροσωπεύει τον τύπο σκυροδέματος που επεκτείνει το βασικό στοιχείο. Σημειώστε ότι οι πρόσθετες ευθύνες ή λειτουργίες προστίθενται σε αυτόν τον τύπο.
  3. Διακοσμητής - αντιπροσωπεύει μια αναφορά σε ένα στοιχείο. Οι δυναμικές λειτουργίες προστίθενται σε αυτόν τον τύπο.

Τώρα, ας εξετάσουμε την ακόλουθη τάξη.

δημόσια αφηρημένη τάξη Υπάλληλος

   {

δημόσια αφηρημένη συμβολοσειρά Display ();

   }

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

Η κατηγορία EmployeeConcrete επεκτείνει την κατηγορία Employee και προσθέτει επιπλέον ιδιότητες σε αυτήν. Δείτε πώς θα μοιάζει αυτή η τάξη.

   δημόσια τάξη EmployeeConcrete: Υπάλληλος

   {

δημόσια συμβολοσειρά FirstName {set; παίρνω; }

δημόσια συμβολοσειρά LastName {set; παίρνω; }

δημόσια συμβολοσειρά Διεύθυνση {set; παίρνω; }

δημόσια παράκαμψη συμβολοσειράς Εμφάνιση ()

       {

Δεδομένα StringBuilder = νέο StringBuilder ();

data.Append ("Όνομα:" + Όνομα);

data.Append ("\ nΤέλος όνομα:" + Επώνυμο);

data.Append ("\ nΔιεύθυνση:" + Διεύθυνση);

επιστροφή δεδομένων.ToString ();

       }

   }

Η κλάση EmployeeDecorator επεκτείνει την κλάση υπαλλήλων, δέχεται μια παρουσία της κλάσης συστατικών που ονομάζεται Employee και παρακάμπτει τη μέθοδο Display (). Δείτε πώς θα μοιάζει αυτή η τάξη.

δημόσια τάξη EmployeeDecorator: Employee

   {

Υπάλληλος = null;

προστατευμένο EmployeeDecorator (Υπάλληλος εργαζομένου)

       {

this.employee = υπάλληλος;

       }

δημόσια παράκαμψη συμβολοσειράς Εμφάνιση ()

       {

επιστρέφοντας υπάλληλος. Εμφάνιση ();

       }

   }

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

δημόσια τάξη PermanentEm EmployeeDecorator: EmployeeDecorator

   {

// Προσθέστε ακίνητα που σχετίζονται με μόνιμο υπάλληλο

ιδιωτικό διπλό PF {get; σειρά; }

δημόσιο PermanentEm EmployeeDecorator (Υπάλληλος εργαζομένου): βάση (υπάλληλος)

       {   }

δημόσια παράκαμψη συμβολοσειράς Εμφάνιση ()

       {

βάση επιστροφής.Display () + "\ n Τύπος υπαλλήλου: Μόνιμο";

       }

   }

Και, αυτό πρέπει να κάνετε! Τώρα μπορείτε να δημιουργήσετε μια παρουσία του PermanentEm EmployeeDecorator και να τη χρησιμοποιήσετε όπως φαίνεται στο παρακάτω απόσπασμα κώδικα.

static void Main (συμβολοσειρά [] args)

       {

EmployeeConcrete karyawanConcrete = νέο EmployeeConcrete

{FirstName = "Joydip", LastName = "Kanjilal", Διεύθυνση = "Χαϊντεραμπάντ, Ινδία"};

PermanentEm EmployeeDecorator ملازمDecorator = νέο PermanentEm EmployeeDecorator (υπάλληλοςConcrete);

Console.WriteLine (υπάλληλοςDecorator.Display ());

Κονσόλα. Διαβάστε ();

       }

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

δημόσια τάξη ContractEm EmployeeDecorator: EmployeeDecorator

   {

// Προσθέστε ακίνητα που σχετίζονται με συμβασιούχο υπάλληλο

ιδιωτικό διπλό RatePerHour {get; σειρά; }

δημόσια σύμβασηEm EmployeeDecorator (Υπάλληλος): βάση (υπάλληλος)

       { }

δημόσια παράκαμψη συμβολοσειράς Εμφάνιση ()

       {

επιστροφή βάσης.Display () + "\ n Τύπος υπαλλήλου: Συμβατική";

       }

   }

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να χρησιμοποιήσετε την κλάση ContractEm EmployeeDecorator.

static void Main (συμβολοσειρά [] args)

       {

EmployeeConcrete karyawanConcrete = νέο EmployeeConcrete

{FirstName = "Joydip", LastName = "Kanjilal", Διεύθυνση = "Χαϊντεραμπάντ, Ινδία"};

ContractEm EmployeeDecorator ملازمDecorator = νέο ContractEm EmployeeDecorator (υπάλληλοςConcrete);

Console.WriteLine (υπάλληλοςDecorator.Display ());

Κονσόλα. Διαβάστε ();

       }