CodeGym /جاوا بلاگ /Random-SD /فيڪٽري ڊيزائن جي نموني
John Squirrels
سطح
San Francisco

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

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

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

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

اچو ته ڪافي جا مختلف قسم تيار ڪريون

فرض ڪريو اسان هڪ ڪافي شاپ کي خودڪار ڪرڻ چاهيون ٿا. اسان کي اسان جي پروگرام کي سيکارڻ جي ضرورت آهي ته مختلف قسم جا ڪافي ڪيئن ٺاهيو. هن کي ڪرڻ لاءِ، اسان ڪافي جي قسمن جي نمائندگي ڪرڻ لاءِ هڪ ڪافي ڪلاس ۽ ڪجهه نڪتل طبقا ٺاهينداسين جيڪي اسان تيار ڪنداسين: آمريڪن، ڪيپوڪينو، ايسپريسو ۽ لٽي. اچو ته هڪ عام ڪافي ڪلاس سان شروع ڪريون:
public class Coffee {
    public void grindCoffee(){
        // Grind the coffee
    }
    public void makeCoffee(){
        // Brew the coffee
    }
    public void pourIntoCup(){
        // Pour into a cup
    }
}
اڳيون، اسان ان جا ٻار ڪلاس ٺاهينداسين:
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("Here's your coffee! Thanks! Come again!");
        return coffee;
    }
}
طريقو orderCoffeeٻن حصن ۾ تقسيم ڪري سگهجي ٿو:
  1. هڪ بيان ۾ ڪافي جي مخصوص مثال جي تخليق switch. هي اهو آهي جتي هڪ ڪارخانو اهو ڪري ٿو جيڪو اهو ڪري ٿو - هڪ مخصوص قسم ٺاهيو حالتن جي لحاظ سان.
  2. تياري - هي آهي پيسڻ، پکڻ ۽ پيالي ۾ وجهڻ.
هتي اهو ڄاڻڻ ضروري آهي ته جيڪڏهن توهان کي مستقبل ۾ طريقي ۾ تبديليون ڪرڻ جي ضرورت آهي:
  1. پاڻ تيار ڪرڻ ۾ شامل مرحلا (پيسڻ، پکڻ، ۽ پيالو ۾ وجھڻ) اڻڄاتل رھندا (گهٽ ۾ گھٽ اسان ان تي ڳڻتي آھي).
  2. پر ڪافين جي ترتيب تبديل ٿي سگھي ٿي. ٿي سگهي ٿو ته اسان موچا ٺاهڻ شروع ڪنداسين... فريپو... موچاڪي... جيڪو به هجي، هڪ نئين قسم جي ڪافي.
اسان اڳ ۾ ئي يقين ڪري سگهون ٿا ته مستقبل ۾ اسان کي طريقي جي بيان کي تبديل ڪرڻو پوندو switch. اهو به ممڪن آهي ته اسان جي ڪافي شاپ ۾ اهو 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("Here's your coffee! Thanks! Come again!");
        return coffee;
    }
}
تمام سٺو. ھاڻي اسان ڪارخاني جي ڊيزائن جي عام ڍانچي جو مختصر بيان ڏينداسين.

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

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

    }
}
قدم 5. طريقي جي جسم ۾، هڪ switchبيان لکو جيڪو اينم فيلڊ کي ڳڻيو ۽ ڪلاس جو هڪ مثال ٺاهي ٿو جيڪو منظور ٿيل enumقدر سان ملندو آهي:
class CatFactory {
        public Cat createCat(CatType type) {
            Cat cat = null;

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

            return cat;
        }
    }
هاڻي توهان هڪ باس وانگر ڪارخانو هلائي سگهو ٿا. :)

مشق ڪيئن ڪجي

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