فیکٹری ڈیزائن پیٹرن کیا ہے؟

فیکٹری ڈیزائن پیٹرن کیا ہے؟
آپ جیسے قارئین MUO کو سپورٹ کرنے میں مدد کرتے ہیں۔ جب آپ ہماری سائٹ پر لنکس کا استعمال کرتے ہوئے خریداری کرتے ہیں، تو ہم ملحق کمیشن حاصل کر سکتے ہیں۔ مزید پڑھ.

فیکٹری (یا فیکٹری کا طریقہ) ڈیزائن پیٹرن وفد اور انکیپسولیشن میں مہارت رکھتا ہے۔ یہ پیٹرن ایک سپر کلاس کو ذیلی طبقات میں انسٹیٹیوشن کو موخر کرنے کی اجازت دیتا ہے۔ اس کی وجہ یہ ہے کہ کلاس جس میں بنیادی فیکٹری میتھڈ پیٹرن ہوتا ہے وہ خلاصہ ہے۔





فیکٹری کے طریقہ کار کا اصل ورژن ایک غیر لاگو طریقہ کی شکل اختیار کرتا ہے کیونکہ یہ اس پروڈکٹ کو نہیں جانتا جو یہ بنائے گا۔ فیکٹری کے طریقہ کار کو معلوم ہو سکتا ہے کہ یہ کچھ پروڈکٹ بنا رہا ہے، لیکن اسے اس پروڈکٹ کی مخصوص خصوصیات کا علم نہیں ہے جو وہ بنائے گا۔ یہ علم صرف متعلقہ ذیلی طبقات کے لیے دستیاب ہے۔ لہذا، فیکٹری کے طریقہ کار کو نافذ کرنے اور مناسب اشیاء بنانے کی ذمہ داری صرف ذیلی طبقے کی ہے۔





سٹاپ کوڈ سسٹم سروس رعایت ونڈوز 10۔

جاوا میں فیکٹری ڈیزائن پیٹرن کو نافذ کرنا

یہ مضمون ایک نمونہ فیڈ بیک رپورٹ جنریشن ایپلی کیشن کا استعمال کرتا ہے۔ یہ ایپلیکیشن مخصوص رپورٹس (فیکٹری طریقہ استعمال کرتے ہوئے) بنانے کے لیے کمپنی کو موصول ہونے والے مختلف قسم کے تاثرات (نئے اسنیک کے لیے) استعمال کرتی ہے۔ لہذا، فیکٹری پیٹرن مخصوص فیڈ بیک (یا فیڈ بیک رپورٹ) بنائے گا، درج ذیل بنیادی پروڈکٹ کلاس کو بطور بنیاد استعمال کرتے ہوئے:





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