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