سلام اڄ اسان ڊيزائن جي نمونن جو مطالعو جاري رکنداسين ۽ اسان فيڪٽري جي طريقي جي نموني تي بحث ڪنداسين. توھان کي معلوم ٿيندو ته اھو ڇا آھي ۽ ڪھڙن ڪمن لاءِ ھي نمونو مناسب آھي. اسان هن ڊزائن جي نموني کي عملي طور تي غور ڪنداسين ۽ ان جي جوڙجڪ جو مطالعو ڪنداسين. پڪ ڪرڻ لاءِ ته هر شي واضح آهي، توهان کي هيٺين موضوعن کي سمجهڻ جي ضرورت آهي:
- جاوا ۾ وراثت.
- جاوا ۾ تجريدي طريقا ۽ ڪلاس
فيڪٽري جو طريقو ڪهڙو مسئلو حل ڪري ٿو؟
سڀني ڪارخانن جي ڊيزائن جي نمونن ۾ شرڪت ڪندڙن جا ٻه قسم آھن: ٺاھيندڙ (فيڪٽريز پاڻ) ۽ پراڊڪٽس (فيڪٽريز پاران ٺاھيل شيون). هيٺ ڏنل صورتحال جو تصور ڪريو: اسان وٽ هڪ ڪارخانو آهي جيڪو CodeGym-برانڊڊ ڪارون ٺاهي ٿو. اهو ڄاڻي ٿو ته مختلف قسمن جي جسمن سان ڪارن جا ماڊل ڪيئن ٺاهيا وڃن:- sedans
- اسٽيشن ويگنون
- ڪوپس
- 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;
}
}
هڪ سادي ڪارخاني کي جديد ڪرڻ
اسان جو ڪافي شاپ تمام سٺو هلي رهيو آهي. ايتري قدر جو اسان کي وڌائڻ تي غور ڪري رهيا آهيون. اسان ڪجھ نوان جڳهون کولڻ چاھيون ٿا. اسان باهمت ۽ دلير آهيون، تنهنڪري اسان بورنگ ڪافي شاپس نه ٺاهينداسين. اسان چاهيون ٿا ته هر دڪان کي هڪ خاص موڙ هجي. ان مطابق، شروع ڪرڻ سان، اسين ٻه جڳھون کولينداسين: ھڪڙو اطالوي ۽ ھڪڙو آمريڪي. اهي تبديليون متاثر ٿينديون نه رڳو اندروني ڊيزائن، پر پڻ پيش ڪيل مشروبات:- اطالوي ڪافي شاپ ۾، اسان خاص طور تي اطالوي ڪافي برانڊ استعمال ڪنداسين، خاص پيسڻ ۽ روسٽنگ سان.
- آمريڪي جڳھ ۾ وڏا حصا هوندا، ۽ اسين هر آرڊر سان مارشميلوز جي خدمت ڪنداسين.
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
ڪافي ٺاهڻ جي عملن کي ڳنڍڻ ۽ سروسنگ آرڊر، جڏهن ته هڪ ئي وقت ۾ ڪافي جي مختلف اندازن کي ٺاهڻ لاءِ ڪافي لچڪ برقرار رکي. جواب آهي ها، اسان ڪري سگهون ٿا. هن کي سڏيو ويندو آهي ڪارخاني جو طريقو ڊيزائن وارو نمونو.
هڪ سادي ڪارخاني کان هڪ ڪارخاني جو طريقو
ڪم کي ممڪن طور تي موثر طريقي سان حل ڪرڻ لاء:- اسان طريقو واپس ڪلاس
createCoffee(CoffeeType type)
ڏانهنCoffeeShop
. - اسان هن طريقي کي خلاصو ڪنداسين.
- طبقو
CoffeeShop
خود خلاص ٿي ويندو. - ڪلاس
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);
}
}
مبارڪون. اسان صرف مثال طور اسان جي ڪافي شاپ کي استعمال ڪندي فيڪٽري جو طريقو ڊيزائن جي نموني تي عمل ڪيو.
ڪارخاني جي طريقن جي پويان اصول
هاڻي اچو ته وڌيڪ تفصيل سان غور ڪريون ته اسان کي ڇا مليو. هيٺ ڏنل ڊراگرام ڏيکاري ٿو نتيجو ڪلاس. سائو بلاڪ ٺاهيندڙ طبقن جا آهن، ۽ نيري بلاڪ پيداوار جا طبقا آهن. اسان ڪهڙا نتيجا ڪڍي سگهون ٿا؟- سڀئي پراڊڪٽ تجريدي
Coffee
طبقي جا عمل آهن. - سڀئي تخليق ڪندڙ تجريدي
CoffeeShop
طبقي جا عمل آهن. - اسان ڏسون ٿا ٻه متوازي طبقاتي درجا بندي:
- شين جي درجي بندي. اسان ڏسون ٿا اطالوي اولاد ۽ آمريڪي اولاد
- تخليق ڪندڙن جو درجو. اسان ڏسون ٿا اطالوي اولاد ۽ آمريڪي اولاد
- سپر
CoffeeShop
ڪلاس کي ڪا به ڄاڻ نه آهي ته ڪهڙي مخصوص پراڊڪٽ (Coffee
) ٺاهي ويندي. - سپر
CoffeeShop
ڪلاس هڪ مخصوص پيداوار جي پيدائش کي ان جي اولاد ڏانهن نمائندگي ڪري ٿو. - طبقي جو هر اولاد پنهنجي مخصوص خاصيتن جي مطابق ڪارخاني جو طريقو
CoffeeShop
لاڳو ڪري ٿو .createCoffee()
ٻين لفظن ۾، پروسيسر طبقن جي عملن کي پروسيسر طبقي جي خاصيتن جي بنياد تي مخصوص مصنوعات تيار ڪن ٿا.
هڪ ڪارخاني جو طريقو جي جوڙجڪ
مٿي ڏنل ڊراگرام ڪارخاني جي طريقي جي نموني جي عام ڍانچي کي ڏيکاري ٿو. ٻيو ڇا هتي اهم آهي؟- تخليق ڪندڙ طبقو سڀني طريقن کي لاڳو ڪري ٿو جيڪي مصنوعات سان لاڳاپا ڪن ٿا، سواء فيڪٽري جي طريقي جي.
- خلاصو
factoryMethod()
طريقو لازمي طور تي لاڳو ڪيو وڃي ڪلاس جي سڀني اولادن طرفانCreator
. ConcreteCreator
ڪلاس اهو طريقو لاڳو ڪري ٿو ،factoryMethod()
جيڪو سڌو سنئون پيداوار ٺاهي ٿو.- هي طبقو مخصوص مصنوعات ٺاهڻ جو ذميوار آهي. هي واحد طبقو آهي جنهن ۾ انهن شين کي ٺاهڻ بابت معلومات آهي.
- سڀني پروڊڪٽس کي لازمي طور تي هڪ عام انٽرفيس لاڳو ڪرڻ گهرجي، يعني اهي لازمي طور تي هڪ عام پراڊڪٽ ڪلاس جو اولاد هجن. اهو ضروري آهي ته جيئن طبقن جيڪي پروڊڪٽس کي استعمال ڪن ٿا انهن تي خاص عملن جي بجاءِ تجريدي طور ڪم ڪري سگهن ٿا.
GO TO FULL VERSION