JavaRush /جاوا بلاگ /Random-SD /فيڪٽري ڊيزائن جي نموني

فيڪٽري ڊيزائن جي نموني

گروپ ۾ شايع ٿيل
هيلو دوست! اڄ اسان توهان سان گڏ ڊيزائن جي نمونن جو مطالعو جاري رکنداسين. هن ليڪچر ۾ اسان فيڪٽري بابت ڳالهائينداسين. اسان توهان سان بحث ڪنداسين ته هن ٽيمپليٽ کي استعمال ڪندي ڪهڙو مسئلو حل ڪيو ويو آهي، ۽ هڪ مثال ڏسو ته ڪيئن هڪ ڪارخانو هڪ ڪافي شاپ کولڻ ۾ مدد ڪري ٿي. ۽ مان توهان کي فيڪٽري ٺاهڻ لاءِ 5 سادي قدم پڻ ڏيندس. فيڪٽري ڊيزائن جو نمونو - 1ساڳئي صفحي تي سڀني سان گڏ ٿيڻ ۽ آساني سان جوهر کي سمجهڻ لاء، توهان کي هيٺين عنوانن سان واقف ٿيڻ گهرجي:
  • جاوا ۾ وراثت
  • جاوا ۾ حوالن جي قسمن کي تنگ ڪرڻ ۽ وڌائڻ
  • مختلف طبقن ۽ شين جي وچ ۾ رابطي

هڪ ڪارخانو ڇا آهي؟

فيڪٽري ڊيزائن جو نمونو توهان کي شين جي تخليق کي ڪنٽرول ڪرڻ جي اجازت ڏئي ٿو. نئين شئي ٺاهڻ جو عمل ايترو سادو نه آهي، پر اهو ايترو پيچيده به ناهي. اسان سڀ ڄاڻون ٿا ته نئين شئي ٺاهڻ لاء اسان کي استعمال ڪرڻ گهرجي new. ۽ اهو لڳي سگھي ٿو ته هتي انتظام ڪرڻ لاء ڪجھ به ناهي، پر اهو ائين ناهي. مشڪلاتون پيدا ٿي سگهن ٿيون جڏهن اسان جي ايپليڪيشن ۾ هڪ خاص طبقو آهي جنهن ۾ ڪيترائي اولاد آهن، ۽ اهو ضروري آهي ته ڪجهه شرطن تي منحصر ڪري هڪ مخصوص طبقي جو مثال ٺاهيو وڃي. فئڪٽري هڪ ڊزائن جو نمونو آهي جيڪو ڪجهه حالتن جي بنياد تي مختلف شيون ٺاهڻ جي مسئلي کي حل ڪرڻ ۾ مدد ڪري ٿو. خلاصو، اهو ناهي؟ وڌيڪ وضاحت ۽ وضاحت ظاهر ٿيندي جڏهن اسان هيٺ ڏنل مثال کي ڏسو.

اسان مختلف قسم جا ڪافي ٺاهيندا آهيون

اچو ته چئو ته اسان هڪ ڪافي شاپ کي خودڪار ڪرڻ چاهيون ٿا. اسان کي سکڻ جي ضرورت آهي ته ڪيئن مختلف قسمن جي ڪافي تيار ڪرڻ. هن کي ڪرڻ لاء، اسان جي ايپليڪيشن ۾ اسان هڪ ڪافي ڪلاس ۽ ان جي نڪتل ٺاهي سگهنداسين: آمريڪن، ڪيپوڪينو، ايسپريسو، لٽي - ڪافي جا قسم جيڪي اسان تيار ڪنداسين. اچو ته عام ڪافي ڪلاس سان شروع ڪريون:
public class Coffee {
    public void grindCoffee(){
        // перемалываем кофе
    }
    public void makeCoffee(){
        // делаем кофе
    }
    public void pourIntoCup(){
        // наливаем в чашку
    }
}
اڳيون، اچو ته ان جا وارث پيدا ڪريون:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
اسان جا گراهڪ ڪجهه قسم جي ڪافي جو آرڊر ڪندا، ۽ اها معلومات پروگرام ڏانهن منتقل ڪرڻ جي ضرورت آهي. اهو مختلف طريقن سان ٿي سگهي ٿو، مثال طور استعمال ڪندي String. پر اھو انھن مقصدن لاءِ بھترين موزون آھي enum. اچو ته enumان ۾ ڪافي جا قسم ٺاهي ۽ وضاحت ڪريون جن لاءِ اسان آرڊر قبول ڪريون ٿا:
public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
چڱو، هاڻي اچو ته اسان جي ڪافي شاپ لاءِ ڪوڊ لکون:
public class CoffeeShop {

    public Coffee orderCoffee(CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new Americano();
                break;
            case ESPRESSO:
                coffee = new Espresso();
                break;
            case CAPPUCCINO:
                coffee = new Cappucсino();
                break;
            case CAFFE_LATTE:
                coffee = new CaffeLatte();
                break;
        }

        coffee.grindCoffee();
        coffee.makeCoffee();
        coffee.pourIntoCup();

        System.out.println("Вот ваш кофе! Спасибо, приходите еще!");
        return coffee;
    }
}
طريقو orderCoffeeٻن حصن ۾ ورهائي سگهجي ٿو:
  1. هڪ بلاڪ ۾ هڪ مخصوص ڪافي مثال ٺاهڻ switch-case. هي اهو آهي جتي فيڪٽري ڇا ڪري ٿي هڪ مخصوص قسم جي پيداوار حالتن تي منحصر آهي.
  2. تياري پاڻ کي پيس، پچائڻ ۽ پيالو ۾ وجهي آهي.
ڇا ڄاڻڻ ضروري آهي ته توهان کي مستقبل ۾ طريقي ۾ تبديليون ڪرڻ جي ضرورت آهي:
  1. تيار ڪرڻ جو الگورتھم پاڻ (پيسڻ، پچائڻ ۽ پيالي ۾ وجهڻ) بدلجندڙ نه رهندو (گهٽ ۾ گهٽ اسان کي اميد آهي).
  2. پر ڪافي جي حد تبديل ٿي سگھي ٿي. ٿي سگهي ٿو ته اسان موچا ٺاهڻ شروع ڪنداسين.. موچا.. موڪاچي... خدا کيس رحم ڪري، هڪ نئين قسم جي ڪافي.
اسان اڳ ۾ ئي فرض ڪري سگهون ٿا ته مستقبل ۾، هڪ خاص درجي جي امڪان سان، اسان کي طريقي ۾ تبديليون ڪرڻي پوندي، بلاڪ ڏانهن switch-case. اهو به ممڪن آهي ته اسان جي ڪافي شاپ ۾ اهو طريقو orderCoffeeئي نه هوندو جنهن ۾ اسان مختلف قسم جا ڪافي ٺاهيندا آهيون. تنهن ڪري، ڪيترن ئي هنڌن تي تبديليون ڪرڻو پوندو. توهان شايد اڳ ۾ ئي سمجهي رهيا آهيو ته مان ڇا حاصل ڪري رهيو آهيان. اسان کي ريفيڪٽر ڪرڻ جي ضرورت آهي. ڪافي ٺاھڻ جي ذميوار بلاڪ کي ٻن سببن لاءِ الڳ ڪلاس ۾ منتقل ڪريو:
  1. اسان ٻين هنڌن تي ڪافي ٺاهڻ جي منطق کي ٻيهر استعمال ڪرڻ جي قابل هوندا.
  2. جيڪڏهن رينج تبديل ٿئي ٿي، اسان کي ڪوڊ کي هر هنڌ تبديل ڪرڻ جي ضرورت نه پوندي جتي ڪافي تخليق استعمال ڪئي ويندي. اهو صرف هڪ جاء تي ڪوڊ تبديل ڪرڻ لاء ڪافي ٿيندو.
ٻين لفظن ۾، اهو فيڪٽري کي ختم ڪرڻ جو وقت آهي.

اسان پنهنجي پهرين ڪارخاني کي ڏسي رهيا آهيون

هن کي ڪرڻ لاء، اچو ته هڪ نئون ڪلاس ٺاهيو جيڪو صرف ڪافي ڪلاس جا ضروري مثال ٺاهڻ لاء ذميوار هوندو:
public class SimpleCoffeeFactory {
    public Coffee createCoffee (CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new Americano();
                break;
            case ESPRESSO:
                coffee = new Espresso();
                break;
            case CAPPUCCINO:
                coffee = new Cappucino();
                break;
            case CAFFE_LATTE:
                coffee = new CaffeLatte();
                break;
        }

        return coffee;
    }
}
مبارڪون هجن! اسان صرف فيڪٽري ڊيزائن جي نموني کي ان جي آسان ترين شڪل ۾ لاڳو ڪيو آهي. جيتوڻيڪ سڀڪنھن شيء کي به سادو ٿي سگهي ٿو ته طريقو createCoffeeجامد ڪيو ويو آهي. پر پوءِ اسان ٻه امڪان وڃائي ويهنداسين:
  1. وراثت مان SimpleCoffeeFactoryورثي ۾ آڻيو createCoffee.
  2. اسان جي طبقن ۾ گهربل فيڪٽري تي عمل درآمد ڪريو.
عمل ڪرڻ جي ڳالھ. اسان کي ڪافي جي دڪان تي واپس وڃڻو پوندو ۽ اسان جي ڪافي ٺاهڻ واري ڪارخاني کي لاڳو ڪرڻ جي ضرورت آهي.

ڪافي جي دڪان ۾ ڪارخاني جو تعارف

اچو ته فيڪٽري استعمال ڪندي اسان جي ڪافي شاپ ڪلاس کي ٻيهر لکون:
public class CoffeeShop {

    private final SimpleCoffeeFactory coffeeFactory;

    public CoffeeShop(SimpleCoffeeFactory coffeeFactory) {
        this.coffeeFactory = coffeeFactory;
    }

    public Coffee orderCoffee(CoffeeType type) {
        Coffee coffee = coffeeFactory.createCoffee(type);
        coffee.grindCoffee();
        coffee.makeCoffee();
        coffee.pourIntoCup();

        System.out.println("Вот ваш кофе! Спасибо, приходите еще!");
        return coffee;
    }
}
زبردست. ھاڻي اچو ته فئڪٽري جي جوڙجڪ جي جوڙجڪ جي جوڙجڪ ۽ مختصر طور تي وضاحت ڪرڻ جي ڪوشش ڪريو.

توهان جي پنهنجي ڪارخاني کي کولڻ لاء 5 قدم

قدم 1. توھان جي پروگرام ۾ توھان وٽ ھڪڙو ڪلاس آھي ڪيترن ئي اولادن سان، جيئن ھيٺ ڏنل تصوير ۾ آھي: فيڪٽري ڊيزائن جو نمونو - 2قدم 2. توھان ھڪڙو ڪلاس ٺاھيو آھي enumجنھن ۾ توھان ھر ھڪڙي نسل جي طبقي لاء ھڪڙو اينم متغير بيان ڪندا آھيو:
enum CatType {
    LION,
    TIGER,
    BARSIK
}
قدم 3. توھان پنھنجي ڪارخاني ٺاھيو. توهان ان کي سڏيو MyClassFactory، ڪوڊ هيٺ ڏنل آهي:
class CatFactory {}
قدم 4. توھان پنھنجي ڪارخاني ۾ ھڪڙو طريقو ٺاھيو createMyClassجيڪو متغير - enum MyClassType. هيٺ ڏنل ڪوڊ:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
قدم 5. توهان طريقي جي جسم ۾ هڪ بلاڪ لکندا آهيو جنهن ۾ توهان سڀني اينيم ويلز ذريعي ٻيهر ورجايو ۽ قيمت switch-caseسان لاڳاپيل طبقي جو هڪ مثال ٺاهيو :enum
class CatFactory {
        public Cat createCat(CatType type) {
            Cat cat = null;

            switch (type) {
                case LION:
                    cat =  new Barsik();
                    break;
                case TIGER:
                    cat = new Tiger();
                    break;
                case BARSIK:
                    cat =  new Lion();
                    break;
            }

            return cat;
        }
    }
صاحب وانگر.

تربيت ڪيئن ڪجي

پڙهڻ سٺو آهي، لکڻ جو ڪوڊ به بهتر آهي. جيڪڏھن توھان جي نالي ۾ اکر جو ھڪڙو تعداد آھي، ڪوشش ڪريو پنھنجو ورچوئل پزيريا ٺاھيو. جيڪڏهن توهان جي نالي ۾ هڪ بي جوڙ انگ اکر آهن، هڪ مجازي سشي بار ٺاهڻ جي ڪوشش ڪريو. جيڪڏهن توهان گمنام آهيو، توهان خوش قسمت آهيو. اڄ توهان آرام ڪري سگهو ٿا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION