फ़ैक्टरी डिज़ाइन पैटर्न क्या है?

फ़ैक्टरी डिज़ाइन पैटर्न क्या है?
आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं। अधिक पढ़ें।

फ़ैक्टरी (या फ़ैक्टरी विधि) डिज़ाइन पैटर्न प्रतिनिधिमंडल और इनकैप्सुलेशन में माहिर है। यह पैटर्न एक सुपरक्लास को उपवर्गों के लिए तात्कालिकता को स्थगित करने की अनुमति देता है। ऐसा इसलिए है क्योंकि जिस वर्ग में प्राथमिक फ़ैक्टरी विधि पैटर्न होता है वह सार है।





फ़ैक्टरी पद्धति का मूल संस्करण एक गैर-कार्यान्वित विधि का रूप धारण कर लेता है क्योंकि यह उस उत्पाद को नहीं जानता है जो इसे बनाएगा। फ़ैक्टरी पद्धति को पता चल सकता है कि यह कुछ उत्पाद बना रहा है, लेकिन यह उस उत्पाद की विशिष्ट विशेषताओं को नहीं जानता जो इसे बनाएगा। यह ज्ञान केवल संबंधित उपवर्गों के लिए उपलब्ध है। इसलिए, फ़ैक्टरी पद्धति को लागू करने और उपयुक्त वस्तुएँ बनाने की ज़िम्मेदारी पूरी तरह से एक उपवर्ग की है।





जावा में फ़ैक्टरी डिज़ाइन पैटर्न लागू करना

यह आलेख एक नमूना फ़ीडबैक रिपोर्ट जनरेशन एप्लिकेशन का उपयोग करता है। यह एप्लिकेशन विशिष्ट रिपोर्ट (फ़ैक्टरी विधि का उपयोग करके) बनाने के लिए कंपनी द्वारा प्राप्त विभिन्न प्रकार के फीडबैक (एक नए स्नैक के लिए) का उपयोग करता है। इसलिए, फ़ैक्टरी पैटर्न निम्नलिखित प्राथमिक उत्पाद वर्ग को आधार के रूप में उपयोग करके विशिष्ट प्रतिक्रिया (या प्रतिक्रिया रिपोर्ट) बनाएगा:





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

नए स्नैक के लिए प्रत्येक फीडबैक में तीन अनिवार्य गुण, एक समीक्षक का नाम, एक समीक्षा संदेश और एक संख्या रेटिंग (एक से पांच तक) होगी। कंपनी को मिलने वाले विभिन्न प्रकार के फीडबैक तीन चैनलों में से एक से आएंगे:

ईमेल प्रतिक्रिया वर्ग



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

आप देखेंगे कि प्रत्येक फ़ीडबैक उपवर्ग के पास एक विशिष्ट गुण होता है। इसका मतलब यह है कि आपको प्रत्येक फ़ीडबैक प्रकार के लिए कम से कम एक ऐसी प्रॉपर्टी का उपयोग करके रिपोर्ट बनानी होगी जो उस प्रकार के लिए अद्वितीय हो।

सरल कारखाना

फ़ैक्टरी डिज़ाइन पैटर्न का उपयोग करने के लिए एक साधारण फ़ैक्टरी एक लोकप्रिय तरीका है। यह दृष्टिकोण एक विधि (सरल फैक्ट्री) में सभी अलग-अलग फीडबैक (या उत्पादों) को समूहबद्ध करने और पैरामीटर के आधार पर उचित प्रतिक्रिया का चयन करने पर जोर देता है।





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

हालाँकि, साधारण फ़ैक्टरी दृष्टिकोण फ़ैक्टरी डिज़ाइन पैटर्न नहीं है, न ही यह डिज़ाइन पैटर्न है। यह एक डिजाइन अवधारणा की तरह अधिक है।

फैक्टरी विधि

फ़ैक्टरी विधि डिज़ाइन पैटर्न का सही प्रतिनिधित्व है। कारखाने की विधि का उपयोग करते हुए, सुधार किया गया फीडबैक रिपोर्ट फैक्टरी जावा वर्ग अब निम्नलिखित कोड शामिल होंगे:

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

आप निम्न वर्ग आरेख के साथ फ़ैक्टरी डिज़ाइन पैटर्न की संरचना को परिभाषित कर सकते हैं:

  फैक्टरी विधि वर्ग आरेख

ऊपर दिए गए आरेख से आप देखेंगे कि एक अमूर्त वर्ग (या इंटरफ़ेस) में फ़ैक्टरी पद्धति का एक सार संस्करण होगा। इसलिए, अमूर्त वर्ग का विस्तार करने वाली ठोस फ़ैक्टरी कक्षाएं उन गुणों का उपयोग करके फ़ैक्टरी पद्धति को लागू करेंगी जो उस उत्पाद के लिए अद्वितीय हैं जिसे वह बनाना चाहता है। आपको यह भी ध्यान देना चाहिए कि किसी भी ठोस कारखाने वर्ग को एक या अधिक उत्पाद बनाने चाहिए।

नमूना आवेदन में तीन संबंधित लेकिन अद्वितीय उत्पाद हैं। प्रत्येक प्रतिक्रिया प्रकार में कम से कम एक अनूठी संपत्ति होती है। इसलिए, एप्लिकेशन को प्रत्येक उत्पाद के निर्माण के लिए तीन ठोस कारखानों की आवश्यकता होगी।

ईमेल प्रतिक्रिया फैक्टरी

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

मेल फीडबैक फैक्टरी

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

सोशल मीडिया फीडबैक फैक्ट्री

 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)।