جواب 1:

فیکٹری ڈیزائن پیٹرن:

  • یہ تخلیقی ڈیزائن پیٹرن کے تحت آتا ہے۔ فیکٹری پیٹرن کا کہنا ہے کہ آبجیکٹ کی تخلیق ان پٹ ٹائپ کا استعمال کرکے کسی اور کلاس کے ذریعہ سنبھال لی جائے گی۔

فوائد:

  • یہ ڈھیلے جوڑنے کی اجازت دیتا ہے۔

فیکٹری ڈیزائن پیٹرن کب استعمال کریں؟

  • فیکٹری ڈیزائن کا نمونہ استعمال کیا جاتا ہے جب ہمارے پاس ایک سے زیادہ ذیلی کلاسوں کے ساتھ ایک سپر کلاس موجود ہے اور ان پٹ کی بنیاد پر ، ہمیں ایک ذیلی طبقے کو واپس کرنے کی ضرورت ہے۔مثال: اگر کوئی ریسٹورنٹ سبزی خورد ، غیر سبزی کھانا اور اطالوی کھانا پیش کرتا ہے۔ ویگ فوڈ ، نان ویگ فوڈ اور اطالوی فوڈ کے ساتھ تین طبقات کی طرح سلوک کریں جن کا سپر کلاس فوڈ ہے۔ اگر کوئی صارف "ویج" پوچھے تو فیکٹری کا طریقہ "ویگ فوڈ" کلاس واپس کردے گا۔

مثال:

مرحلہ 1: ایک تجریدی کلاس "فوڈ" بنائیں جس میں "بل پیپرسن" اور "آئٹمز" نامی دو متغیرات ہوں۔

 عوامی خلاصہ کلاس فوڈ

{
    محفوظ ڈبل بل پیپرسن؛
    محفوظ سیٹ اشیاء؛

    پبلک فوڈ (ڈبل بلپرپرسن)

    {
        this.billPerPerson = بلپرپرپرسن؛
        this.items = new ہیشسیٹ <> ()؛
    }

    عوامی ڈبل getBill ()

    {
        واپسی بل پیپرسن؛

    }

    عوامی سیٹ getItems ()
    {
        واپس اشیاء؛
    }
}

مرحلہ 2: کنکریٹ کلاس بنائیں جو خلاصہ کلاس "فوڈ" میں توسیع کریں

پبلک کلاس ویج فوڈ نے خوراک میں توسیع کی
{
    عوامی VegFood ()

    {
        سپر (100)؛
        items.add ("idly")؛
        items.add ("ڈوسہ")؛
        items.add ("Vada")؛
    }
}

پبلک کلاس نان ویج فوڈ نے خوراک میں توسیع کی
{
    عوامی نان ویگ فوڈ ()
    {
        سپر (120)؛
        items.add ("بریانی")؛
        items.add ("چکن 65")؛
    }
}

مرحلہ 3: فوڈ سیور تشکیل دیں جو فیکٹری کلاس ہے جس میں معلومات کی بنیاد پر کنکریٹ کے لئے کوئی شے تیار کی جا:۔

عوامی کلاس فوڈ سیور

{
    عوامی جامد فوڈ گیٹ فوڈ (سٹرنگ فوڈ ٹائپ)

    {
        اگر (FoodType.equals ("veg"))
        {
            نیا VegFood () واپس کریں؛
        }
        ورنہ اگر (FoodType.equals ("non veg"))
        {
            نیا نون ویگ فوڈ () واپس کریں؛
        }
        اور
        {
            System.out.println ("ہم خدمت نہیں کررہے ہیں" + فوڈ ٹائپ)؛
            واپس منسوخ؛
        }
    }
}

مرحلہ 4: کھانے کی قسم پر مبنی مطلوبہ کھانا حاصل کرنے کے لئے مین کلاس "کسٹمر"۔

عوامی کلاس گاہک
{
    عوامی جامد باطل اہم (سٹرنگ [] آرگس)
    {
        فوڈ کسٹمر 1 فوڈ = فوڈ سیور ڈاٹ فوڈ ("ویج")؛
        سسٹم.اٹ.پرنٹلن ("کسٹمر 1")؛
        سسٹم آؤٹ.پریٹلن ("اشیا:" + کسٹمر 1 فوڈ.بیٹ آئٹمز (). ٹاسٹرنگ ())؛
        سسٹم آؤٹ.پریٹلن ("بل:" + کسٹمر 1 فوڈ ڈاٹ بل ())؛
        فوڈ کسٹمر 2 فوڈ = فوڈ سیور ڈاٹ فوڈ ("نان ویج")؛
        سسٹم.اٹ.پرنٹلن ("کسٹمر 1")؛
        سسٹم آؤٹ.پرنٹل ("اشیا:" + کسٹمر 2 فوڈ.بیٹ آئٹمز)) ٹاسٹرنگ ())؛
        سسٹم آؤٹ.پریٹلن ("بل:" + کسٹمر 2 فوڈ ڈاٹ بل ())؛
    }
}

خلاصہ فیکٹری ڈیزائن پیٹرن:

  • یہ تخلیقی ڈیزائن پیٹرن کے تحت آتا ہے۔ یہ کنکریٹ کلاسوں کی وضاحت کیے بغیر متعلقہ یا منحصر اشیاء کے کنبوں کو بنانے کے لئے ایک انٹرفیس مہیا کرتا ہے۔ خلاصہ فیکٹری پیٹرن ایک سپر فیکٹری ہے جو ان پٹ کی بنیاد پر بہترین فیکٹری لوٹائے گی۔ یہ فیکٹریوں کی فیکٹری کے طور پر کام کرتا ہے۔ .یہ کلائنٹ کو یہ جاننے سے باز رکھتا ہے کہ کون سا فیکٹری واپس آئے گی۔

حقیقی زندگی کی مثال:

  • ایک بڑی فیکٹری پر غور کریں جو صابن تیار کرتا ہے۔ اس فیکٹری میں وہ سب چیزیں تیار نہیں ہوں گی جو صابن کے لئے درکار ہیں۔ اس میں بہت سی ذیلی فیکٹریاں ہوں گی جن میں "صابن بار" ، "صابن ریپر" تیار ہوں گے ، اور ہر چیز جمع کی جائے گی۔ مرکزی فیکٹری کے ذریعہ

خلاصہ فیکٹری ڈیزائن پیٹرن کب استعمال کریں؟

  • موکل کو اس سے آزاد رہنا چاہئے کہ کس طرح اشیاء تیار کی جاتی ہیں اور کس کے لئے کلاس آبجیکٹ تخلیق کیا جاتا ہے۔ جب مدد ملتی ہے تو کسی کلاس کے خاندان سے کسی چیز کو بنانے کی ضرورت ہوتی ہے۔

نوٹ: یہ پریشان کن ہوسکتی ہے لہذا براہ کرم اس صفحے کے آخر میں ان ویڈیوز کو دیکھیں جن کو میں نے سرایت کیا ہے۔

مثال:

مرحلہ نمبر 1:

  • "کورس" کے نام سے ایک انٹرفیس بنائیں۔
عوامی انٹرفیس کورس
{
    عوامی سٹرنگ getCourseName ()؛
}

مرحلہ 2:

  • ٹھوس کلاس بنائیں جو "کورس" انٹرفیس کو نافذ کرتی ہیں۔
عوامی کلاس پروگرامنگ کورس کورس نافذ کرتا ہے
{
    ٹویٹ ایمبیڈ کریں
    عوامی سٹرنگ getCourseName ()
    {
       "جاوا" واپس؛
    }
}

پبلک کلاس نان پروگرام پروگرامنگ کورس لاگو کرتا ہے
{
    ٹویٹ ایمبیڈ کریں
    عوامی سٹرنگ getCourseName ()
    {
        "DSP" واپس؛
    }
}

سٹی 3:

  • "ماخذ" کے نام سے ایک انٹرفیس بنائیں۔
عوامی انٹرفیس ماخذ
{
    عوامی سٹرنگ getSourceName ()؛
}

مرحلہ 4:

  • ٹھوس کلاس بنائیں جو "ماخذ" انٹرفیس کو نافذ کرتی ہیں۔
عوامی کلاس آف لائن ذریعہ کو نافذ کرتی ہے
{
    ٹویٹ ایمبیڈ کریں
    عوامی سٹرنگ getSourceName ()
    {
        "کتب" واپس؛
    }
}

عوامی کلاس آن لائن ذریعہ کو نافذ کرتا ہے
{
    ٹویٹ ایمبیڈ کریں
    عوامی سٹرنگ getSourceName ()
    {
        "یوٹیوب" واپس کریں؛
    }
}

مرحلہ 5:

  • ایک خلاصہ کلاس "SourceCourseFactory" بنائیں۔
عوامی خلاصہ کلاس SourceCourseFactory
{
    عوامی خلاصہ ماخذ getSource (سٹرنگ سورس ٹائپ)؛
    
    عوامی خلاصہ کورس getCourse (سٹرنگ کورس ٹائپ)؛
}

مرحلہ 6:

  • ایک فیکٹری کلاس "کورس فیکٹری" بنائیں جو "SourceCourseFactory" تک پھیلا ہوا ہے
پبلک کلاس کورسز فیکٹری نے SourceCourseFactory میں توسیع کی ہے
{
    ٹویٹ ایمبیڈ کریں
    عوامی ماخذ getSource (سٹرنگ سورس ٹائپ)
    {
        واپس منسوخ؛
    }

    ٹویٹ ایمبیڈ کریں
    عوامی کورس getCourse (سٹرنگ کورس ٹائپ)
    {
        اگر (کورس ٹائپ.ایک۔الجس کی شناخت ("پروگرامنگ"))
        {
            نیا پروگرامنگ کورس () واپس؛
        }
        ورنہ اگر (کورس ٹائپ.ایک۔ایل۔ایسگنور کیس ("نان پروگرامنگ"))
        {
            نیا نان پروگرام پروگرامنگ کورس () واپس کریں۔
        }
        اور
        {
            واپس منسوخ؛
        }
    }
}

مرحلہ 7:

  • ایک فیکٹری کلاس "سورس فیکٹری" بنائیں جو "SourceCourseFactory" تک پھیلا ہوا ہے
پبلک کلاس SourceFactory نے SourceCourseFactory میں توسیع کی ہے
{

    ٹویٹ ایمبیڈ کریں
    عوامی ماخذ getSource (سٹرنگ سورس ٹائپ)
    {
        اگر (SourceType.equalsIgnoreCase ("آن لائن"))
        {
            نیا آن لائن واپس کریں ()؛
        }
        ورنہ اگر (SourceType.equalsIgnoreCase ("آف لائن"))
        {
            نیا آف لائن واپس ()؛
        }
        اور
        {
            واپس منسوخ؛
        }
    }

    ٹویٹ ایمبیڈ کریں
    عوامی کورس getCourse (سٹرنگ کورس ٹائپ)
    {
       واپس منسوخ؛
    }
    
}

مرحلہ 8:

  • اصلی فیکٹری کلاس آبجیکٹ حاصل کرنے کے لئے ایک عمدہ کلاس بنائیں جو خلاصہ فیکٹری کلاس کہلاتا ہے اور پھر اس مقصد کو دیگر دیگر کاروائیاں انجام دینے کے لئے استعمال کرتا ہے۔
 عوامی طبقے کی مثال
{
    عوامی جامد باطل اہم (سٹرنگ [] آرگس)
    {
        SourceCourseFactory کورس = فیکٹریکریٹر.بیٹ سورسکورسفیکٹری ("کورس")؛

        سسٹم.اٹ.پرنٹلن (کورس.getCourse ("پروگرامنگ")۔ getCourseName ())؛

        SourceCourseFactory ذریعہ = فیکٹری کریٹر.بیٹ سورسکورسفیکٹری ("ماخذ")؛
        سسٹم.اٹ.پرنٹلن (Source.getSource ("آن لائن")۔ getSourceName ())؛

    }
}