if (config.OS == "Windows") then dialog = new WindowsDialog()
else if (config.OS == "Web") then dialog = new WebDialog()
else throw new Exception("Error! Unknown operating system.")
// Agar mijozning qolgan kodlari fabrikalar va mahsulotlar bilan faqat umumiy // interfeys orqali ishlasa, unda qaysi zavod dastlab yaratilganligi muhim bo'lmaydi. method main() is
this.initialize()
dialog.render()
Topshiriq:
Siz yaratmoqchi bo’lgan barcha mahsulotlarni umumiy interfeysga keltiring.
Mahsulot ishlab chiqaradigan sinfda bo'sh factory methodni yarating. Qaytish turi sifatida umumiy mahsulot interfeysini ko'rsating.
Keyin, sinf kodini ko'rib chiqing va mahsulot yaratadigan barcha maydonlarni toping. Shu bilan bir qatorda ushbu bo'limlarni turli xil mahsulotlarni yaratish kodini unga o'tkazib, factory methodni chaqiruvlar bilan almashtiring.
Qaysi mahsulotni yaratishni boshqarish uchun factory methodga bir nechta parametrlarni kiritishingiz kerak bo'lishi mumkin.
Har bir mahsulot turi uchun subklass yarating va undagi factory methodni qayta yuklang. U erda joylashgan superklassdan tegishli mahsulotni yaratish uchun kodni siljiting.
Agar yaratuvchining mavjud subklasslari uchun juda ko'p mahsulot yaratilayotgan bo'lsa, siz bir xil subklass ichida turli xil mahsulotlarni qaytaradigan parametrlarni factory methodiga kiritishingiz mumkin.
Masalan, sizda "AviaPochta " va "Yer usti pochta" va "Airplane", "Truck" va "Train" mahsulot sinflari bo'lgan "Pochta" klassi mavjud. Havo samolyotlariga to'g'ri keladi, ammo Ground Mail uchun ikkita mahsulot mavjud. Poezdlar uchun yangi pochta subklassini yaratishingiz mumkin, ammo muammoni hal qilishning boshqa usullari mavjud. Mijoz kodi yaratiladigan mahsulot turini boshqaradigan YerustiPochta sinfi factory methodiga argumentlarini keltirishi mumkin.
Agar barcha harakatlardan so'ng factory method bo'sh bo'lsa, siz uni mavhum qilishingiz mumkin. Agar unda biron bir narsa qolsa, bu muhim emas, bu uning standart bajarilishi bo'ladi.