سلام! اڄ اسان ڊيزائن جي نمونن جو مطالعو جاري رکون ٿا ۽ خلاصو ڪارخاني بابت ڳالهائينداسين . ليڪچر دوران اسان ڇا ڪنداسين:
- اچو ته بحث ڪريون ته هڪ تجريدي ڪارخانو ڇا آهي ۽ هي نمونو ڪهڙو مسئلو حل ڪري ٿو.
- اسان يوزر انٽرفيس سان ڪافي آرڊر ڪرڻ لاءِ ڪراس پليٽ فارم ايپليڪيشن جو فريم ورڪ ٺاهينداسين؛
- اچو ته ھن نموني کي استعمال ڪرڻ لاءِ ھدايتن جو مطالعو ڪريون ڊاگرام ۽ ڪوڊ سان؛
- بونس جي طور تي، ليڪچر ۾ لڪايل هڪ ايسٽر ايگ آهي، جنهن جي مهرباني توهان جاوا استعمال ڪندي آپريٽنگ سسٽم جو نالو طئي ڪرڻ سکندا ۽ نتيجو تي منحصر ڪري، هڪ يا ٻيو عمل انجام ڏيو.
- جاوا ۾ وراثت؛
- جاوا ۾ تجريدي ڪلاس ۽ طريقا.
تجريدي ڪارخاني جو نمونو ڪهڙو مسئلو حل ڪري ٿو؟
خلاصو ڪارخانو، سڀني ڪارخاني جي نمونن وانگر، اسان کي نئين شين جي ٺاھڻ کي صحيح طريقي سان منظم ڪرڻ ۾ مدد ڪري ٿي. ان جي مدد سان، اسان منظم ڪريون ٿا "ڇڏي وڃڻ" جي مختلف خاندانن جي هڪٻئي سان ڳنڍيل شيون. هڪٻئي سان لاڳاپيل شين جا مختلف خاندان... اهو ڇا آهي؟ پريشان نه ڪريو: عملي طور تي هر شي آسان کان وڌيڪ آسان آهي. اچو ته ان سان شروع ڪريون ته لاڳاپيل شين جو خاندان ڇا ٿي سگهي ٿو؟ فرض ڪريو ته توهان ۽ مان هڪ حڪمت عملي ٺاهي رهيا آهيون، ۽ ان ۾ ڪيترائي جنگي يونٽ آهن:- پيادل فوج
- گهوڙي سوار
- تيرنداز
اسان ڪافي شاپ کي خودڪار ڪرڻ جاري رکون ٿا
پوئين ليڪچر ۾ ، اسان فئڪٽري جي طريقي جي نموني جو اڀياس ڪيو، جنهن جي مدد سان اسان ڪافي جي ڪاروبار کي وڌائڻ جي قابل ٿي ويا ۽ ڪافي نوان وڪرو پوائنٽ کوليا. اڄ اسان پنهنجي ڪاروبار کي جديد بڻائڻ لاءِ پنهنجو ڪم جاري رکنداسين. تجريدي ڪارخاني جو نمونو استعمال ڪندي، اسان آن لائن ڪافي آرڊر ڪرڻ لاءِ نئين ڊيسڪ ٽاپ ايپليڪيشن جو بنياد رکنداسين. جڏهن اسان ڊيسڪ ٽاپ لاءِ ايپليڪيشن لکون ٿا، اسان کي هميشه ڪراس پليٽ فارم بابت سوچڻ گهرجي. اسان جي ايپليڪيشن کي MacOS ۽ ونڊوز ٻنهي تي ڪم ڪرڻ گهرجي (اسپائلر: لينڪس توهان لاءِ هوم ورڪ طور ڇڏي ويندو). اسان جي درخواست ڪيئن نظر ايندي؟ بلڪل سادو: هي هڪ فارم هوندو جنهن تي مشتمل هوندو هڪ ٽيڪسٽ فيلڊ، هڪ چونڊيو فيلڊ، ۽ هڪ بٽڻ. جيڪڏهن توهان کي مختلف آپريٽنگ سسٽم استعمال ڪرڻ جو تجربو آهي، توهان ضرور محسوس ڪيو آهي ته ونڊوز تي بٽڻون Mac جي ڀيٽ ۾ مختلف طور تي پيش ڪيون ويون آهن. ٻين سڀني وانگر ... سو، اچو ته شروع ڪريون. پيداوار جي خاندانن جي ڪردار ۾، جيئن توهان شايد اڳ ۾ ئي سمجهي چڪا آهيو، اسان وٽ گرافڪ انٽرفيس عناصر هوندا:- بٽڻ؛
- ٽيڪسٽ فيلڊ؛
- چونڊ لاءِ ميدان.
onClick
، onValueChanged
يا onInputChanged
. اهي. طريقا جيڪي اسان کي مختلف واقعن کي سنڀالڻ جي اجازت ڏين ٿا (بٽڻ تي ڪلڪ ڪندي، ٽيڪسٽ داخل ڪرڻ، منتخب ٿيل باڪس ۾ قيمت چونڊيو). اهو سڀ ڪجهه ڄاڻي واڻي ڇڏيو ويو آهي ته جيئن مثال کي اوورلوڊ نه ڪيو وڃي ۽ ڪارخاني جي نموني جي مطالعي لاء ان کي وڌيڪ بصري بڻائڻ. اچو ته وضاحت ڪريون خلاصي انٽرفيس اسان جي پروڊڪٽس لاءِ:
public interface Button {}
public interface Select {}
public interface TextField {}
هر آپريٽنگ سسٽم لاءِ، اسان کي ان آپريٽنگ سسٽم جي انداز ۾ انٽرفيس عناصر ٺاهڻ گهرجن. اسان Windows ۽ MacOS لاءِ لکون ٿا. اچو ته ونڊوز لاءِ عمل درآمد ڪيون:
public class WindowsButton implements Button {
}
public class WindowsSelect implements Select {
}
public class WindowsTextField implements TextField {
}
هاڻي ساڳيو MacOS لاءِ:
public class MacButton implements Button {
}
public class MacSelect implements Select {
}
public class MacTextField implements TextField {
}
زبردست. ھاڻي اسان پنھنجي خلاصي ڪارخاني کي شروع ڪري سگھون ٿا، جيڪو سڀني موجوده خلاصو پيداوار جي قسمن کي ٺاھيندو:
public interface GUIFactory {
Button createButton();
TextField createTextField();
Select createSelect();
}
ڪامل. جئين توهان ڏسي سگهو ٿا، اڃا تائين ڪجھ به پيچيده ناهي. پوء هر شيء بلڪل سادو آهي. پروڊڪٽس سان قياس ڪندي، اسان هر OS لاءِ اسان جي ڪارخاني جا مختلف عمل ٺاهيندا آهيون. اچو ته ونڊوز سان شروع ڪريون:
public class WindowsGUIFactory implements GUIFactory {
public WindowsGUIFactory() {
System.out.println("Creating gui factory for Windows OS");
}
public Button createButton() {
System.out.println("Creating Button for Windows OS");
return new WindowsButton();
}
public TextField createTextField() {
System.out.println("Creating TextField for Windows OS");
return new WindowsTextField();
}
public Select createSelect() {
System.out.println("Creating Select for Windows OS");
return new WindowsSelect();
}
}
ڪنسول آئوٽ پٽ اندر طريقن ۽ تعمير ڪندڙن کي شامل ڪيو ويو آھي وڌيڪ ظاھر ڪرڻ لاءِ ته اھو ڪيئن ڪم ڪري ٿو. هاڻي macOS لاءِ:
public class MacGUIFactory implements GUIFactory {
public MacGUIFactory() {
System.out.println("Creating gui factory for macOS");
}
@Override
public Button createButton() {
System.out.println("Creating Button for macOS");
return new MacButton();
}
@Override
public TextField createTextField() {
System.out.println("Creating TextField for macOS");
return new MacTextField();
}
@Override
public Select createSelect() {
System.out.println("Creating Select for macOS");
return new MacSelect();
}
}
نوٽ: هر طريقو، ان جي دستخط جي مطابق، هڪ خلاصو قسم موٽائي ٿو. پر هن طريقي جي اندر اسان پيداوار جي هڪ ڪنڪريٽ عملدرآمد ٺاهيندا آهيون. هي واحد جڳهه آهي جتي اسان مخصوص مثالن جي تخليق کي ڪنٽرول ڪندا آهيون. هاڻي اهو فارم ڪلاس لکڻ جو وقت آهي. هي هڪ جاوا ڪلاس آهي جنهن جا فيلڊ انٽرفيس عناصر آهن:
public class OrderCoffeeForm {
private final TextField customerNameTextField;
private final Select coffeTypeSelect;
private final Button orderButton;
public OrderCoffeeForm(GUIFactory factory) {
System.out.println("Creating order coffee form");
customerNameTextField = factory.createTextField();
coffeTypeSelect = factory.createSelect();
orderButton = factory.createButton();
}
}
ھڪڙو خلاصو ڪارخانو ٺاھيو ويو آھي فارم ٺاھيندڙ ڏانھن، جيڪو ٺاھي ٿو انٽرفيس عناصر. اسان گهربل ڪارخاني تي عمل درآمد کي تعمير ڪندڙ کي منتقل ڪنداسين ته جيئن اسان هڪ خاص OS لاء انٽرفيس عناصر ٺاهي سگهون ٿا.
public class Application {
private OrderCoffeeForm orderCoffeeForm;
public void drawOrderCoffeeForm() {
// Определим Name операционной системы, получив meaning системной проперти через System.getProperty
String osName = System.getProperty("os.name").toLowerCase();
GUIFactory guiFactory;
if (osName.startsWith("win")) { // Для windows
guiFactory = new WindowsGUIFactory();
} else if (osName.startsWith("mac")) { // Для mac
guiFactory = new MacGUIFactory();
} else {
System.out.println("Unknown OS, can't draw form :( ");
return;
}
orderCoffeeForm = new OrderCoffeeForm(guiFactory);
}
public static void main(String[] args) {
Application application = new Application();
application.drawOrderCoffeeForm();
}
}
جيڪڏهن اسان ونڊوز تي ايپليڪيشن هلائيندا آهيون، اسان کي هيٺ ڏنل آئوٽ حاصل ڪنداسين:
Creating gui factory for Windows OS
Creating order coffee form
Creating TextField for Windows OS
Creating Select for Windows OS
Creating Button for Windows OS
هڪ Mac تي پيداوار هن ريت هوندي:
Creating gui factory for macOS
Creating order coffee form
Creating TextField for macOS
Creating Select for macOS
Creating Button for macOS
لينڪس تي:
Unknown OS, can't draw form :(
خير، توهان ۽ مان هيٺ ڏنل نتيجو ڪڍون ٿا. اسان هڪ GUI ايپليڪيشن لاءِ هڪ فريم ورڪ لکيو آهي جيڪو بلڪل اهي انٽرفيس عناصر ٺاهي ٿو جيڪي ڏنل OS لاءِ مناسب آهن. اچو ته مختصر طور تي ورجائيون ته اسان ڇا ٺاهيو:
- پيداوار جو خاندان: ان پٽ فيلڊ، چونڊ فيلڊ ۽ بٽڻ.
- پراڊڪٽس جي هن خاندان جا مختلف عمل، ونڊوز ۽ macOS لاءِ.
- هڪ خلاصو ڪارخانو، جنهن جي اندر اسان پنهنجي پروڊڪٽس ٺاهڻ لاءِ انٽرفيس جي وضاحت ڪئي.
- اسان جي ڪارخاني جا ٻه عمل، جن مان هر هڪ مصنوعات جي مخصوص خاندان ٺاهڻ لاء ذميوار آهي.
- هڪ فارم، هڪ جاوا طبقو جنهن جا شعبا خلاصا انٽرفيس عناصر آهن جيڪي هڪ تجريدي ڪارخاني کي استعمال ڪندي گهربل قدرن سان تعمير ڪندڙ ۾ شروع ڪيا ويا آهن.
- ايپليڪيشن ڪلاس. ان جي اندر، اسان هڪ فارم ٺاهيندا آهيون جنهن سان اسان پنهنجي ڪارخاني جي گهربل عمل کي تعمير ڪندڙ ڏانهن منتقل ڪندا آهيون.
خلاصو ڪارخانو: استعمال لاء هدايتون
خلاصو ڪارخانو مختلف پراڊڪٽ خاندانن جي تخليق کي منظم ڪرڻ لاءِ هڪ ڊزائين نمونو آهي بغير ڪنهن مخصوص پراڊڪٽ جي طبقن سان ڳنڍجي. جڏهن هي ٽيمپليٽ استعمال ڪندي، توهان کي لازمي آهي:- پراڊڪٽ خاندانن جي پاڻ کي وضاحت ڪريو. اچو ته فرض ڪريو اسان وٽ انهن مان ٻه آهن:
SpecificProductA1
,SpecificProductB1
SpecificProductA2
,SpecificProductB2
- خاندان جي اندر هر پراڊڪٽ لاءِ، هڪ خلاصو ڪلاس (انٽرفيس) بيان ڪريو. اسان جي صورت ۾ اهو آهي:
ProductA
ProductB
- هر پراڊڪٽ جي خاندان ۾، هر پراڊڪٽ کي لازمي طور تي قدم 2 ۾ بيان ڪيل انٽرفيس کي لاڳو ڪرڻ گهرجي.
- قدم 2 ۾ بيان ڪيل هر پراڊڪٽ لاءِ طريقن سان گڏ هڪ خلاصو ڪارخانو ٺاهيو. اسان جي صورت ۾، اهي طريقا هوندا:
ProductA createProductA();
ProductB createProductB();
- تجريدي ڪارخاني جي عملن کي ٺاهيو ته جيئن هر عمل درآمد هڪ ئي خاندان جي شين جي پيداوار کي ڪنٽرول ڪري. هن کي ڪرڻ لاء، تجريدي ڪارخاني جي هر عمل جي اندر، اهو ضروري آهي ته سڀني ٺاهيل طريقن کي لاڳو ڪرڻ لاء، انهي ڪري ته مصنوعات جي ٺهڪندڙ عملن کي پيدا ڪيو وڃي ۽ انهن جي اندر واپس اچي.
// Определим общие интерфейсы продуктов
public interface ProductA {}
public interface ProductB {}
// Создадим различные реализации (семейства) наших продуктов
public class SpecificProductA1 implements ProductA {}
public class SpecificProductB1 implements ProductB {}
public class SpecificProductA2 implements ProductA {}
public class SpecificProductB2 implements ProductB {}
// Создадим абстрактную фабрику
public interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
// Создадим реализацию абстрактной фабрики для создания продуктов семейства 1
public class SpecificFactory1 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new SpecificProductA1();
}
@Override
public ProductB createProductB() {
return new SpecificProductB1();
}
}
// Создадим реализацию абстрактной фабрики для создания продуктов семейства 1
public class SpecificFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new SpecificProductA2();
}
@Override
public ProductB createProductB() {
return new SpecificProductB2();
}
}
گهر جو ڪم
مواد کي مضبوط ڪرڻ لاء، توهان 2 شيون ڪري سگهو ٿا:- ڪافي آرڊرنگ ايپليڪيشن کي بهتر بڻايو ته جيئن اهو لينڪس تي ڪم ڪري.
- ڪنهن به حڪمت عملي جا يونٽ پيدا ڪرڻ لاءِ پنهنجو خلاصو ڪارخانو ٺاهيو. هي يا ته ٿي سگهي ٿو هڪ تاريخي حڪمت عملي حقيقي لشڪر سان يا orcs، dwarves ۽ elves سان هڪ تصور. بنيادي شيء اها آهي ته توهان ان کي دلچسپ ڳوليندا آهيو. تخليقي حاصل ڪريو، ڪنسول ڏانهن پن پوسٽ ڪريو، ۽ نمونن کي سکڻ ۾ مزو وٺو!
GO TO FULL VERSION