Ποιο είναι το μοτίβο σχεδιασμού του εργοστασίου;

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

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





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





Εφαρμογή του Factory Design Pattern στην Java

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





 public abstract class Feedback { 
    
   private String reviewerName;
   private String reviewMessage;
   private int reviewRatings;
    
   public Feedback(String reviewerName, String reviewMessage, int reviewRatings) {
        this.reviewerName = reviewerName;
        this.reviewMessage = reviewMessage;
        this.reviewRatings = reviewRatings;
  }
    
  public String getReviewerName() {
      return reviewerName;
  }
  public void setReviewerName(String reviewerName) {
      this.reviewerName = reviewerName;
  }
  public String getReviewMessage() {
      return reviewMessage;
  }
  public void setReviewMessage(String reviewMessage) {
      this.reviewMessage = reviewMessage;
  }
  public int getReviewRatings() {
      return reviewRatings;
  }
  public void setReviewRatings(int reviewRatings) {
      this.reviewRatings = reviewRatings;
  }
}

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

Τάξη σχολίων μέσω email



 public class EmailFeedback extends Feedback { 
    
  private String reviewerEmail;

  public EmailFeedback(String reviewerName, String reviewMessage, int reviewRatings, String reviewerEmail) {
     super(reviewerName, reviewMessage, reviewRatings);
     this.reviewerEmail = reviewerEmail;
  }
  public String getReviewerEmail() {
     return reviewerEmail;
  }
  public void setReviewerEmail(String reviewerEmail) {
     this.reviewerEmail = reviewerEmail;
  }
}

Τάξη σχολίων αλληλογραφίας

 public class MailFeedback extends Feedback { 
    
   private String returnAddress;
    
   public MailFeedback(String reviewerName, String reviewMessage, int reviewRatings, String returnAddress) {
        super(reviewerName, reviewMessage, reviewRatings);
        this.returnAddress = returnAddress;
     }

   public String getReturnAddress() {
       return returnAddress;
     }

   public void setReturnAddress(String returnAddress) {
       this.returnAddress = returnAddress;
     }
}

Τάξη ανατροφοδότησης μέσων κοινωνικής δικτύωσης





 public class SocialMediaFeedback extends Feedback { 

   private String reviewerHandle;

   public SocialMediaFeedback(String reviewerName, String reviewMessage, int reviewRatings, String reviewerHandle) {
        super(reviewerName, reviewMessage, reviewRatings);
        this.reviewerHandle = reviewerHandle;
     }
    
   public String getReviewerHandle() {
       return reviewerHandle;
     }

   public void setReviewerHandle(String reviewerHandle) {
       this.reviewerHandle = reviewerHandle;
     }
}

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

Το Απλό Εργοστάσιο

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





πώς να παρακολουθήσετε το youtube με φίλους
 public class FeedbackReportFactory { 
    
    public Feedback makeFeedback(String feedbackType) {
         Feedback feedback = null;
          
         if(feedbackType.equals("email")) {
               feedback = new EmailFeedback();
         }else if (feedbackType.equals("mail")) {
               feedback = new MailFeedback();
         }else if (feedbackType.equals("social")) {
               feedback = new SocialMediaFeedback();
         }
     return feedback;
     }
}

Ωστόσο, η απλή εργοστασιακή προσέγγιση δεν είναι το εργοστασιακό μοτίβο σχεδιασμού, ούτε είναι ένα σχέδιο σχεδίασης. Είναι περισσότερο σαν ιδέα σχεδιασμού.

Η εργοστασιακή μέθοδος

Η εργοστασιακή μέθοδος είναι η αληθινή αναπαράσταση του σχεδίου σχεδίου. Χρησιμοποιώντας την εργοστασιακή μέθοδο, η αναμόρφωση FeedbackReportFactory Κλάση Java θα περιέχει τώρα τον ακόλουθο κώδικα:

 public abstract class FeedbackReportFactory { 
    public abstract void makeFeedbackReport(Feedback feedback);
}

Μπορείτε να ορίσετε τη δομή του εργοστασιακού σχεδίου σχεδίου με το ακόλουθο διάγραμμα κλάσεων:

  Διάγραμμα κλάσης εργοστασιακής μεθόδου

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

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

μετατροπή ταμπλέτας windows 10 σε android

Email Feedback Factory

 public class EmailFeedbackReport extends FeedbackReportFactory{ 
    
    EmailFeedback feedback;

    @Override
    public void makeFeedbackReport(Feedback feedback) {
          
        this.feedback = (EmailFeedback) feedback;
          
        System.out.println("\nReport For Feedback Via Email" +
                  "\nReviewer Name: " +this.feedback.getReviewerName() +
                  "\nFeedback: " + this.feedback.getReviewMessage() +
                  "\nRatings: " + this.feedback.getReviewRatings() +
                  "\nEmal Address: " + this.feedback.getReviewerEmail());
     }
}

Mail Feedback Factory

 public class MailFeedbackReport extends FeedbackReportFactory { 
    MailFeedback feedback;

    @Override
    public void makeFeedbackReport(Feedback feedback) {
         this.feedback = (MailFeedback) feedback;
          
         System.out.println("\nReport For Feedback Via Mail" +
                     "\nReviewer Name: " +this.feedback.getReviewerName() +
                     "\nFeedback: " + this.feedback.getReviewMessage() +
                     "\nRatings: " + this.feedback.getReviewRatings() +
                     "\nMailing Address: " + this.feedback.getReturnAddress());
     }
}

Social Media Feedback Factory

 public class SocialMediaFeedbackReport extends FeedbackReportFactory { 
    SocialMediaFeedback feedback;

    @Override
    public void makeFeedbackReport(Feedback feedback) {
        this.feedback = (SocialMediaFeedback) feedback;
                
        System.out.println("\nReport For Feedback Via Social Media" +
                      "\nReviewer Name: " + this.feedback.getReviewerName() +
                      "\nFeedback: " + this.feedback.getReviewMessage() +
                      "\nRatings: " + this.feedback.getReviewRatings() +
                      "\nReviewer Social Media Handle: " + this.feedback.getReviewerHandle());
           }
}

Δοκιμή του δείγματος εφαρμογής

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

 public class Main { 

   public static void main(String[] args) {
       Feedback feedback = new EmailFeedback("Nick", "Great product!", 5, "nick@email.com");
       Feedback feedback2 = new MailFeedback("john", "The product is good but not something I would buy regularly", 4, "first Street");
       Feedback feedback3 = new SocialMediaFeedback("Jane", "It's not for me", 2, "@janey");
          
       FeedbackReportFactory factory = new EmailFeedbackReport();
       FeedbackReportFactory factory2 = new MailFeedbackReport();
       FeedbackReportFactory factory3 = new SocialMediaFeedbackReport();
          
       factory.makeFeedbackReport(feedback);
       factory2.makeFeedbackReport(feedback2);
       factory3.makeFeedbackReport(feedback3);
   }

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

  Έξοδος κονσόλας εργοστασιακής μεθόδου

Πλεονεκτήματα της χρήσης του μοτίβου εργοστασιακής σχεδίασης

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

Όταν χρησιμοποιείτε το εργοστασιακό μοτίβο σχεδίασης, χρησιμοποιείτε δύο σημαντικές αρχές σχεδίασης: Ανοιχτό-κλειστό και Αντιστροφή ελέγχου (IoC).