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

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

گروپ ۾ شايع ٿيل
سلام اڄ اسان ڊيزائن جي نمونن جو مطالعو جاري رکنداسين ۽ اسان فيڪٽري جي طريقي جي نموني تي بحث ڪنداسين. ڊيزائن جا نمونا: فيڪٽري جو طريقو - 1 توھان کي معلوم ٿيندو ته اھو ڇا آھي ۽ ڪھڙن ڪمن لاءِ ھي نمونو مناسب آھي. اسان هن ڊزائن جي نموني کي عملي طور تي غور ڪنداسين ۽ ان جي جوڙجڪ جو مطالعو ڪنداسين. پڪ ڪرڻ لاءِ ته هر شي واضح آهي، توهان کي هيٺين موضوعن کي سمجهڻ جي ضرورت آهي:
  1. جاوا ۾ وراثت.
  2. جاوا ۾ تجريدي طريقا ۽ ڪلاس

فيڪٽري جو طريقو ڪهڙو مسئلو حل ڪري ٿو؟

سڀني ڪارخانن جي ڊيزائن جي نمونن ۾ شرڪت ڪندڙن جا ٻه قسم آھن: ٺاھيندڙ (فيڪٽريز پاڻ) ۽ پراڊڪٽس (فيڪٽريز پاران ٺاھيل شيون). هيٺ ڏنل صورتحال جو تصور ڪريو: اسان وٽ هڪ ڪارخانو آهي جيڪو CodeGym-برانڊڊ ڪارون ٺاهي ٿو. اهو ڄاڻي ٿو ته مختلف قسمن جي جسمن سان ڪارن جا ماڊل ڪيئن ٺاهيا وڃن:
  • sedans
  • اسٽيشن ويگنون
  • ڪوپس
اسان جو ڪاروبار ايترو ته خوشحال ٿيو جو هڪ سٺو ڏينهن اسان هڪ ٻيو ڪار ٺاهيندڙ - OneAuto حاصل ڪيو. سمجھدار ڪاروباري مالڪن جي حيثيت سان، اسان ڪنهن به OneAuto گراهڪ کي وڃائڻ نٿا چاهيون، ۽ ان ڪري اسان کي پيداوار جي بحالي جي ڪم کي منهن ڏيڻو پوي ٿو ته جيئن اسين پيدا ڪري سگهون ٿا:
  • CodeGym sedans
  • ڪوڊ گيم اسٽيشن ويگنون
  • CodeGym coupes
  • OneAuto sedans
  • OneAuto اسٽيشن ويگنون
  • OneAuto coupes
جئين توهان ڏسي سگهو ٿا، مصنوعات جي هڪ گروپ جي بدران، اسان وٽ هاڻي ٻه آهن، ۽ اهي ڪجهه تفصيلن ۾ مختلف آهن. فيڪٽري جو طريقو ڊيزائن جو نمونو آهي جڏهن اسان کي شين جا مختلف گروپ ٺاهڻ گهرجن، جن مان هر هڪ ۾ ڪجهه خاص خاصيتون آهن. اسان هن نموني جي رهنمائي واري اصول کي عملي طور تي غور ڪنداسين، تدريجي طور تي سادي کان پيچيده ڏانهن، اسان جي ڪافي شاپ جو مثال استعمال ڪندي، جيڪو اسان گذريل سبقن مان هڪ ۾ ٺاهيو هو .

ڪارخاني جي طرز جي باري ۾ ٿورو

مان توهان کي ياد ڏياران ٿو ته اسان اڳ ۾ هڪ ننڍڙو مجازي ڪافي دڪان ٺاهيا هئا. هڪ سادي ڪارخاني جي مدد سان، اسان سکيا ته مختلف قسم جا ڪافي ڪيئن ٺاهيا وڃن. اڄ اسان هن مثال کي ٻيهر ڪم ڪنداسين. اچو ته ياد ڪريون ته اسان جو ڪافي شاپ ڪيئن نظر آيو، ان جي سادي ڪارخاني سان. اسان وٽ ڪافي ڪلاس هو:

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 {}
اسان آرڊر ڏيڻ آسان بڻائڻ لاءِ هڪ اينم ٺاهيو:

public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
ڪافي ڪارخانو پاڻ هن طرح نظر آيو:

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 Cappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new CaffeLatte();
                break;
        }
        
        return coffee;
    }
}
۽ نيٺ، ڪافي جو دڪان پاڻ هن طرح نظر آيو:

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

هڪ سادي ڪارخاني کي جديد ڪرڻ

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

public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
پر هاڻي اسان وٽ 8 هوندا:

public class ItalianStyleAmericano extends Coffee {}
public class ItalianStyleCappucino extends Coffee {}
public class ItalianStyleCaffeLatte extends Coffee {}
public class ItalianStyleEspresso extends Coffee {}

public class AmericanStyleAmericano extends Coffee {}
public class AmericanStyleCappucino extends Coffee {}
public class AmericanStyleCaffeLatte extends Coffee {}
public class AmericanStyleEspresso extends Coffee {}
جيئن ته اسان موجوده ڪاروباري ماڊل کي برقرار رکڻ چاهيون ٿا، اسان چاهيون ٿا ته orderCoffee(CoffeeType type)طريقي سان ممڪن طور تي ڪجهه تبديلين جي ذريعي. ان تي هڪ نظر وٺو:

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;
}
اسان وٽ ڪهڙا آپشن آهن؟ خير، اسان اڳ ۾ ئي ڄاڻون ٿا ته ڪارخانو ڪيئن لکجي، صحيح؟ سڀ کان سادي شيء جيڪا فوري طور تي ذهن ۾ اچي ٿي اها آهي ٻه ساڳيا ڪارخانا لکڻ، ۽ پوء اسان جي ڪافي دڪان جي تعمير ڪندڙ کي گهربل عمل درآمد ڪرڻ. ائين ڪرڻ سان، ڪافي شاپ جو طبقو تبديل نه ٿيندو. پهرين، اسان کي هڪ نئين فيڪٽري ڪلاس ٺاهڻ جي ضرورت آهي، ان کي اسان جي سادي ڪارخاني جو وارث بڻائڻ، ۽ پوء createCoffee(CoffeeType type)طريقي کي ختم ڪرڻ جي ضرورت آهي. اچو ته اطالوي طرز جي ڪافي ۽ آمريڪي طرز جي ڪافي ٺاهڻ لاءِ ڪارخانا لکون:

public class SimpleItalianCoffeeFactory extends SimpleCoffeeFactory {

    @Override
    public Coffee createCoffee(CoffeeType type) {
        Coffee coffee = null;
        switch (type) {
            case AMERICANO:
                coffee = new ItalianStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new ItalianStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new ItalianStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new ItalianStyleCaffeLatte();
                break;
        }
        return coffee;
    }
}

public class SimpleAmericanCoffeeFactory extends SimpleCoffeeFactory{

    @Override
    public Coffee createCoffee (CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new AmericanStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new AmericanStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new AmericanStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new AmericanStyleCaffeLatte();
                break;
        }

        return coffee;
    }

}
ھاڻي اسان گھربل ڪارخاني تي عمل درآمد ڪري سگھون ٿا CoffeeShop. اچو ته ڏسون ته مختلف ڪافي دڪانن تان ڪافي جو آرڊر ڏيڻ جو ڪوڊ ڪهڙو نظر ايندو. مثال طور، اطالوي انداز ۽ آمريڪي طرز cappuccino:

public class Main {
    public static void main(String[] args) {
        /*
            Order an Italian-style cappuccino:
            1. Create a factory for making Italian coffee
            2. Create a new coffee shop, passing the Italian coffee factory to it through the constructor
            3. Order our coffee
         */
        SimpleItalianCoffeeFactory italianCoffeeFactory = new SimpleItalianCoffeeFactory();
        CoffeeShop italianCoffeeShop = new CoffeeShop(italianCoffeeFactory);
        italianCoffeeShop.orderCoffee(CoffeeType.CAPPUCCINO);
        
        
         /*
            Order an American-style cappuccino
            1. Create a factory for making American coffee
            2. Create a new coffee shop, passing the American coffee factory to it through the constructor
            3. Order our coffee
         */
        SimpleAmericanCoffeeFactory americanCoffeeFactory = new SimpleAmericanCoffeeFactory();
        CoffeeShop americanCoffeeShop = new CoffeeShop(americanCoffeeFactory);
        americanCoffeeShop.orderCoffee(CoffeeType.CAPPUCCINO);
    }
}
اسان ٻه مختلف ڪافي شاپس ٺاهيا، هر هڪ کي گهربل ڪارخانو منتقل ڪيو. هڪ طرف، اسان پنهنجو مقصد پورو ڪيو آهي، پر ٻئي طرف... ڪنهن به طرح اهو صنعتڪارن سان سٺو ناهي ... اچو ته سمجهون ته ڇا غلط آهي. پهريون، فيڪٽرين جي گهڻائي. ڇا؟ هاڻي هر نئين جڳهه لاءِ، اسان کي پنهنجو ڪارخانو ٺاهڻو پوندو ۽ ان کان علاوه، پڪ ڪريو ته ڪو ڪافي شاپ ٺاهڻ وقت لاڳاپيل ڪارخاني کي تعمير ڪندڙ ڏانهن منتقل ڪيو وڃي؟ ٻيو، اهو اڃا تائين هڪ سادي ڪارخانو آهي. بس ٿورڙي جديد. پر اسان هتي آهيون هڪ نئون نمونو سکڻ لاءِ. ٽيون، ڇا هڪ مختلف طريقو ممڪن ناهي؟ اهو تمام سٺو ٿيندو جيڪڏهن اسان ڪافي جي تياري سان لاڳاپيل سڀني مسئلن کي ڪلاس ۾ شامل ڪري سگهون ٿا CoffeeShopڪافي ٺاهڻ جي عملن کي ڳنڍڻ ۽ سروسنگ آرڊر، جڏهن ته هڪ ئي وقت ۾ ڪافي جي مختلف اندازن کي ٺاهڻ لاءِ ڪافي لچڪ برقرار رکي. جواب آهي ها، اسان ڪري سگهون ٿا. هن کي سڏيو ويندو آهي ڪارخاني جو طريقو ڊيزائن وارو نمونو.

هڪ سادي ڪارخاني کان هڪ ڪارخاني جو طريقو

ڪم کي ممڪن طور تي موثر طريقي سان حل ڪرڻ لاء:
  1. اسان طريقو واپس ڪلاس createCoffee(CoffeeType type)ڏانهن CoffeeShop.
  2. اسان هن طريقي کي خلاصو ڪنداسين.
  3. طبقو CoffeeShopخود خلاص ٿي ويندو.
  4. ڪلاس CoffeeShop۾ ٻارن جا ڪلاس هوندا.
ها دوست. اطالوي ڪافي جو دڪان ڪلاس جي اولاد کان وڌيڪ ڪجھ به نه آھي CoffeeShop، جيڪو createCoffee(CoffeeType type)اطالوي بارسٽا جي بھترين روايتن جي مطابق طريقو لاڳو ڪري ٿو. هاڻي، هڪ وقت ۾ هڪ قدم. قدم 1. Coffeeڪلاس کي خلاصو ٺاهيو. اسان وٽ مختلف پراڊڪٽ جا ٻه مڪمل خاندان آهن. اڃا تائين، اطالوي ۽ آمريڪي ڪافين ۾ هڪ عام اباڙ آهي - Coffeeڪلاس. اهو مناسب ٿيندو ته ان کي خلاصو ٺاهيو وڃي:

public abstract class Coffee {
    public void makeCoffee(){
        // Brew the coffee
    }
    public void pourIntoCup(){
        // Pour into a cup
    }
}
قدم 2. CoffeeShopخلاصو ٺاهيو، خلاصو createCoffee(CoffeeType type)طريقي سان

public abstract class CoffeeShop {

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

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

        System.out.println("Here's your coffee! Thanks! Come again!");
        return coffee;
    }

    protected abstract Coffee createCoffee(CoffeeType type);
}
قدم 3. ھڪڙو اطالوي ڪافي شاپ ٺاھيو، جيڪو خلاصو ڪافي شاپ جو اولاد آھي. اسان createCoffee(CoffeeType type)ان ۾ طريقي سان عمل ڪريون ٿا، اطالوي ترڪيب جي خاصيتن کي نظر ۾ رکندي.

public class ItalianCoffeeShop extends CoffeeShop {

    @Override
    public Coffee createCoffee (CoffeeType type) {
        Coffee coffee = null;
        switch (type) {
            case AMERICANO:
                coffee = new ItalianStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new ItalianStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new ItalianStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new ItalianStyleCaffeLatte();
                break;
        }
        return coffee;
    }
}
قدم 4. اسان آمريڪي طرز جي ڪافي شاپ لاءِ به ائين ئي ڪندا آهيون

public class AmericanCoffeeShop extends CoffeeShop {
    @Override
    public Coffee createCoffee(CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new AmericanStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new AmericanStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new AmericanStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new AmericanStyleCaffeLatte();
                break;
        }

        return coffee;
    }
}
قدم 5. چيڪ ڪريو ته ڪيئن آمريڪي ۽ اطالوي lattes نظر ايندي:

public class Main {
    public static void main(String[] args) {
        CoffeeShop italianCoffeeShop = new ItalianCoffeeShop();
        italianCoffeeShop.orderCoffee(CoffeeType.CAFFE_LATTE);

        CoffeeShop americanCoffeeShop = new AmericanCoffeeShop();
        americanCoffeeShop.orderCoffee(CoffeeType.CAFFE_LATTE);
    }
}
مبارڪون. اسان صرف مثال طور اسان جي ڪافي شاپ کي استعمال ڪندي فيڪٽري جو طريقو ڊيزائن جي نموني تي عمل ڪيو.

ڪارخاني جي طريقن جي پويان اصول

هاڻي اچو ته وڌيڪ تفصيل سان غور ڪريون ته اسان کي ڇا مليو. هيٺ ڏنل ڊراگرام ڏيکاري ٿو نتيجو ڪلاس. سائو بلاڪ ٺاهيندڙ طبقن جا آهن، ۽ نيري بلاڪ پيداوار جا طبقا آهن. ڊيزائن جا نمونا: فيڪٽري جو طريقو - 2اسان ڪهڙا نتيجا ڪڍي سگهون ٿا؟
  1. سڀئي پراڊڪٽ تجريدي Coffeeطبقي جا عمل آهن.
  2. سڀئي تخليق ڪندڙ تجريدي CoffeeShopطبقي جا عمل آهن.
  3. اسان ڏسون ٿا ٻه متوازي طبقاتي درجا بندي:
    • شين جي درجي بندي. اسان ڏسون ٿا اطالوي اولاد ۽ آمريڪي اولاد
    • تخليق ڪندڙن جو درجو. اسان ڏسون ٿا اطالوي اولاد ۽ آمريڪي اولاد
  4. سپر CoffeeShopڪلاس کي ڪا به ڄاڻ نه آهي ته ڪهڙي مخصوص پراڊڪٽ ( Coffee) ٺاهي ويندي.
  5. سپر CoffeeShopڪلاس هڪ مخصوص پيداوار جي پيدائش کي ان جي اولاد ڏانهن نمائندگي ڪري ٿو.
  6. طبقي جو هر اولاد پنهنجي مخصوص خاصيتن جي مطابق ڪارخاني جو طريقو CoffeeShopلاڳو ڪري ٿو . createCoffee()ٻين لفظن ۾، پروسيسر طبقن جي عملن کي پروسيسر طبقي جي خاصيتن جي بنياد تي مخصوص مصنوعات تيار ڪن ٿا.
توھان ھاڻي تيار آھيو فيڪٽري جي طريقي جي نموني جي تعريف لاءِ . فيڪٽري جو طريقو نمونو هڪ اعتراض ٺاهڻ لاء هڪ انٽرفيس کي بيان ڪري ٿو، پر ذيلي ڪلاس کي اجازت ڏئي ٿو ته ٺهيل اعتراض جي طبقي کي چونڊڻ لاء. اهڙيء طرح، هڪ ڪارخاني جو طريقو هڪ مثال جي تخليق کي ذيلي ڪلاسز جي نمائندگي ڪري ٿو. عام طور تي، تعريف کي ياد رکڻ ايترو ضروري ناهي جيترو اهو سمجهڻ ته اهو سڀ ڪيئن ڪم ڪري ٿو.

هڪ ڪارخاني جو طريقو جي جوڙجڪ

ڊيزائن جا نمونا: فيڪٽري جو طريقو - 3مٿي ڏنل ڊراگرام ڪارخاني جي طريقي جي نموني جي عام ڍانچي کي ڏيکاري ٿو. ٻيو ڇا هتي اهم آهي؟
  1. تخليق ڪندڙ طبقو سڀني طريقن کي لاڳو ڪري ٿو جيڪي مصنوعات سان لاڳاپا ڪن ٿا، سواء فيڪٽري جي طريقي جي.
  2. خلاصو factoryMethod()طريقو لازمي طور تي لاڳو ڪيو وڃي ڪلاس جي سڀني اولادن طرفان Creator.
  3. ConcreteCreatorڪلاس اهو طريقو لاڳو ڪري ٿو ، factoryMethod()جيڪو سڌو سنئون پيداوار ٺاهي ٿو.
  4. هي طبقو مخصوص مصنوعات ٺاهڻ جو ذميوار آهي. هي واحد طبقو آهي جنهن ۾ انهن شين کي ٺاهڻ بابت معلومات آهي.
  5. سڀني پروڊڪٽس کي لازمي طور تي هڪ عام انٽرفيس لاڳو ڪرڻ گهرجي، يعني اهي لازمي طور تي هڪ عام پراڊڪٽ ڪلاس جو اولاد هجن. اهو ضروري آهي ته جيئن طبقن جيڪي پروڊڪٽس کي استعمال ڪن ٿا انهن تي خاص عملن جي بجاءِ تجريدي طور ڪم ڪري سگهن ٿا.

گهر جو ڪم

اڄ اسان ڪافي ڪم ڪيو آھي ۽ فئڪٽري جي طريقي جي ڊيزائن جي نموني جو اڀياس ڪيو آھي. اهو مواد کي مضبوط ڪرڻ جو وقت آهي! ورزش 1. ٻيو ڪافي شاپ کولڻ لاءِ ڪم ڪريو. اهو ٿي سگهي ٿو هڪ انگريزي طرز يا اسپيني طرز ڪافي جو دڪان. يا اڃا به اسپيس شپ جو انداز. ان کي چمڪائڻ لاءِ ڪافي ۾ کاڌي جو رنگ شامل ڪريو، ۽ توهان جي ڪافي هن دنيا کان ٻاهر ٿي ويندي! ورزش 2. آخري سبق ۾ ، توهان هڪ مشق ڪئي هئي جتي توهان هڪ ورچوئل سوشي بار يا هڪ ورچوئل پيززيريا ٺاهيو هو. هاڻي توهان جي مشق آهي بيهڻ نه. اڄ توهان سکيو ته توهان جي فائدي لاء فيڪٽري طريقي جي نموني کي ڪيئن استعمال ڪجي. اهو وقت آهي هن علم کي استعمال ڪرڻ ۽ پنهنجو ڪاروبار وڌايو؛)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION