Čo je továrenský dizajnový vzor?

Čo je továrenský dizajnový vzor?
Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu. Čítaj viac.

Továrenský (alebo výrobný spôsob) návrhový vzor sa špecializuje na delegovanie a zapuzdrenie. Tento vzor umožňuje nadtriede odložiť inštanciáciu na podtriedy. Je to preto, že trieda, ktorá obsahuje vzor primárnej továrenskej metódy, je abstraktná.





Pôvodná verzia továrenskej metódy má podobu neimplementovanej metódy, pretože nepozná produkt, ktorý vytvorí. Továrenská metóda môže vedieť, že vytvára nejaký produkt, ale nepozná špecifické vlastnosti produktu, ktorý vytvorí. Tieto znalosti sú dostupné len pre príslušné podtriedy. Zodpovednosť za implementáciu továrenskej metódy a vytvorenie vhodných objektov je preto výlučne podtriedou.





Implementácia Factory Design Pattern v Jave

Tento článok využíva vzorovú aplikáciu na generovanie spätnej väzby. Táto aplikácia využíva rôzne typy spätnej väzby, ktorú spoločnosť dostáva (na nové občerstvenie), na vytváranie špecifických správ (pomocou továrenskej metódy). Preto továrenský vzor vytvorí špecifickú spätnú väzbu (alebo správu so spätnou väzbou), pričom ako základ použije nasledujúcu primárnu triedu produktov:





 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;
  }
}

Každá spätná väzba bude mať tri povinné vlastnosti, meno recenzenta, správu o recenzii a číslo hodnotenia (od jednej do päť) pre nový snack. Rôzne typy spätnej väzby, ktoré spoločnosť dostane, budú pochádzať z jedného z troch kanálov:

E-mailová trieda spätnej väzby



 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;
  }
}

E-mailová spätná väzba

 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;
     }
}

Trieda spätnej väzby na sociálne médiá





 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;
     }
}

Všimnete si, že každá podtrieda spätnej väzby má jedinečnú vlastnosť. To znamená, že budete musieť vytvoriť prehľad pre každý typ spätnej väzby pomocou aspoň jednej vlastnosti, ktorá je pre daný typ jedinečná.

Jednoduchá továreň

Jednoduchá továreň je populárny prístup k použitiu výrobného vzoru. Tento prístup zahŕňa zoskupenie všetkých rôznych spätných väzieb (alebo produktov) do metódy (jednoduchá továreň) a výber vhodnej spätnej väzby na základe parametra.





 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;
     }
}

Jednoduchý továrenský prístup však nie je továrenským návrhovým vzorom, ani návrhovým vzorom. Ide skôr o dizajnový koncept.

spotify vs apple music vs amazon

Továrenská metóda

Továrenská metóda je skutočnou reprezentáciou návrhového vzoru. Pomocou továrenskej metódy, reformovaný FeedbackReportFactory Java trieda bude teraz obsahovať nasledujúci kód:

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

Štruktúru výrobného vzoru môžete definovať pomocou nasledujúceho diagramu tried:

  Diagram tried továrenskej metódy

Z vyššie uvedeného diagramu uvidíte, že abstraktná trieda (alebo rozhranie) bude obsahovať abstraktnú verziu továrenskej metódy. Takže konkrétne továrenské triedy, ktoré rozširujú abstraktnú triedu, implementujú továrenskú metódu pomocou vlastností, ktoré sú jedinečné pre produkt, ktorý chce vytvoriť. Mali by ste tiež poznamenať, že každá trieda konkrétnej továrne by mala vytvoriť jeden alebo viac produktov.

Vzorová aplikácia má tri súvisiace, ale jedinečné produkty. Každý typ spätnej väzby má aspoň jednu jedinečnú vlastnosť. Aplikácia teda bude musieť mať tri konkrétne továrne na výrobu každého produktu.

Továreň na e-mailovú spätnú väzbu

 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());
     }
}

Továreň na spätnú väzbu sociálnych médií

 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());
           }
}

Testovanie vzorovej aplikácie

Teraz môžete použiť príslušné výrobné metódy na vytváranie miniatúrnych správ o spätnej väzbe prijatej z rôznych kanálov. Môžeš otestujte aplikáciu pomocou JUnit alebo môžete vytvoriť triedu ovládača:

 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);
   }

Vyššie uvedená trieda Main používa príslušné továrne na vytvorenie troch zostáv, ktoré v konzole produkujú nasledujúci výstup:

  Výstup konzoly továrenskej metódy

Výhody použitia výrobného vzoru dizajnu

Továrenský návrhový vzor podporuje flexibilitu návrhu, kde na vytváranie konkrétnych tried používate rozhrania (alebo abstraktné triedy). Podporuje tiež škálovateľnosť prostredníctvom polymorfizmu tým, že umožňuje novým triedam implementovať existujúce rozhranie pri rozširovaní aplikácie.

Keď používate továrenský návrhový vzor, ​​využívate dva dôležité princípy návrhu: otvorený-zatvorený a inverzia kontroly (IoC).