Kāds ir rūpnīcas dizaina modelis?

Kāds ir rūpnīcas dizaina modelis?
Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Rūpnīcas (vai rūpnīcas metodes) dizaina modelis specializējas deleģēšanā un iekapsulēšanā. Šis modelis ļauj virsklasei atlikt instantiāciju uz apakšklasēm. Tas ir tāpēc, ka klase, kas satur primāro rūpnīcas metodes modeli, ir abstrakta.





kā salabot iPhone, kas iestrēdzis uz Apple logotipa

Sākotnējā rūpnīcas metodes versija ir neīstenota metode, jo tā nezina produktu, ko tā izveidos. Rūpnīcas metode var zināt, ka tā rada kādu produktu, taču tā nezina ražojuma specifiskās īpašības. Šīs zināšanas ir pieejamas tikai attiecīgajām apakšklasēm. Tāpēc atbildība par rūpnīcas metodes ieviešanu un atbilstošu objektu izveidi ir tikai apakšklasei.





Rūpnīcas dizaina modeļa ieviešana Java

Šajā rakstā tiek izmantots atsauksmju atskaites ģenerēšanas lietojumprogrammas paraugs. Šī lietojumprogramma izmanto dažāda veida atsauksmes, ko uzņēmums saņem (jaunai uzkodai), lai izveidotu īpašus pārskatus (izmantojot rūpnīcas metodi). Tāpēc rūpnīcas modelis izveidos īpašu atgriezenisko saiti (vai atsauksmju ziņojumu), par pamatu izmantojot šādu primāro produktu klasi:





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

Katrai atsauksmei būs trīs obligāti rekvizīti, recenzenta vārds, atsauksmes ziņojums un skaitļa vērtējums (no viena līdz pieci) jaunajai uzkodai. Dažāda veida atsauksmes, ko uzņēmums saņems, nāks no viena no trim kanāliem:

E-pasta atsauksmju klase



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

Pasta atsauksmju klase

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

Sociālo mediju atsauksmju klase





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

Jūs ievērosiet, ka katrai atsauksmju apakšklasei ir unikāls īpašums. Tas nozīmē, ka jums būs jāizveido pārskats katram atsauksmju veidam, izmantojot vismaz vienu rekvizītu, kas ir unikāls šim veidam.

Vienkāršā rūpnīca

Vienkārša rūpnīca ir populāra pieeja rūpnīcas dizaina modeļa izmantošanai. Šī pieeja ietver visu atšķirīgo atsauksmju (vai produktu) grupēšanu metodē (vienkāršā rūpnīcā) un atbilstošo atgriezenisko saiti, pamatojoties uz parametru.





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

Tomēr vienkārša rūpnīcas pieeja nav ne rūpnīcas dizaina modelis, ne dizaina modelis. Tas vairāk atgādina dizaina koncepciju.

Rūpnīcas metode

Rūpnīcas metode ir patiess dizaina modeļa attēlojums. Izmantojot rūpnīcas metodi, reformēts FeedbackReportFactory Java klase tagad būs šāds kods:

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

Rūpnīcas dizaina modeļa struktūru var definēt ar šādu klašu diagrammu:

  Rūpnīcas metodes klašu diagramma

Iepriekš redzamajā diagrammā redzēsit, ka abstraktā klase (vai interfeiss) ietvers rūpnīcas metodes abstraktu versiju. Tātad betona rūpnīcas klases, kas paplašina abstrakto klasi, ieviesīs rūpnīcas metodi, izmantojot īpašības, kas ir unikālas produktam, kuru tas vēlas izveidot. Jāņem vērā arī tas, ka jebkurai betona rūpnīcas klasei ir jāizveido viens vai vairāki produkti.

Pieteikuma paraugā ir trīs saistīti, bet unikāli produkti. Katram atsauksmju veidam ir vismaz viens unikāls rekvizīts. Tātad, lietojumprogrammā būs jābūt trim betona rūpnīcām, lai izveidotu katru produktu.

kā saglabāt attēlus no pinterest

E-pasta atsauksmju rūpnīca

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

Pasta atsauksmju rūpnīca

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

Sociālo mediju atsauksmju fabrika

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

Lietojumprogrammas parauga pārbaude

Tagad varat izmantot attiecīgās rūpnīcas metodes, lai izveidotu miniatūras atskaites par atsauksmēm, kas saņemtas no dažādiem kanāliem. Jūs varat pārbaudiet lietojumprogrammu, izmantojot JUnit , vai arī varat izveidot vadītāja klasi:

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

Iepriekš minētajā galvenajā klasē tiek izmantotas attiecīgās rūpnīcas, lai izveidotu trīs atskaites, kas konsolē rada šādu izvadi:

sociālo mediju profilu meklētājprogramma
  Rūpnīcas metodes konsoles izvade

Rūpnīcas dizaina modeļa izmantošanas priekšrocības

Rūpnīcas dizaina modelis veicina dizaina elastību, kur jūs izmantojat saskarnes (vai abstraktas klases), lai izveidotu konkrētas klases. Tas arī veicina mērogojamību, izmantojot polimorfismu, ļaujot jaunām klasēm ieviest esošo saskarni, lietojumprogrammai paplašinoties.

Kad izmantojat rūpnīcas dizaina modeli, jūs izmantojat divus svarīgus projektēšanas principus: atvērtu-slēgtu un vadības inversiju (IoC).