Pattern loyihalash - bu dasturiy ta'minot arxitekturasini loyihalashda aniq bir muammo uchun umumiy echim.
Tayyor funktsiyalar yoki kutubxonalardan farqli o'laroq, pattern oddiygina olish va dasturga nusxalash mumkin emas. Pattern - bu ma'lum bir kod emas, balki ma'lum bir muammoni hal qilishning umumiy kontseptsiyasi bo'lib, u hali ham sizning dasturingizning ehtiyojlariga moslashtirilishi kerak.
Patternlarni ko'pincha algoritmlar bilan aralashtirib yuborishadi, chunki ikkala tushunchada ham ma'lum bo'lgan ba'zi muammolarning tipik echimlari tasvirlangan. Ammo agar algoritm aniq harakatlar to'plami bo'lsa, unda pattern bu echimning yuqori darajadagi tavsifi bo'lib, uning bajarilishi ikki xil dasturda farq qilishi mumkin.
O'xshatishga ko'ra, algoritm - bu aniq qadamlar bilan retsept va pattern - bu echimini beradigan muhandislik chizmasi, ammo uni amalga oshirish uchun aniq qadamlar emas.
Factory Method - bu yuqori sinfda ob'ektlarni yaratish uchun umumiy interfeysni belgilaydigan, subklasslarga o'zlari yaratadigan ob'ektlar turini o'zgartirishga imkon beradigan ishlab chiqaruvchi pattern loyihasi hisoblanadi.
Siz yuklarni boshqarish dasturini yaratayotganingizni tasavvur qiling. Dastlab siz yuklarni faqat avtoulov bilan tashishni kutmoqdasiz. Shuning uchun barcha kodlaringiz yuk mashinalari sinfining ob'ektlari bilan ishlaydi.
Biron bir vaqtda sizning dasturingiz shunchalik mashhur bo'lib ketadiki, dengiz tashuvchilari safga kelib, dasturga dengiz logistika yordamini qo'shishni so'rashadi.
Mavjud kodning katta qismi yuk mashinalari sinflarida kodlangan. Dasturga dengiz kemalari sinflarini qo'shish uchun siz butun dasturni tekshirib chiqishingiz kerak. Bundan tashqari, agar siz keyinchalik dasturga boshqa transport turini qo'shishga qaror qilsangiz, unda bu ishlarning barchasi takrorlanishi kerak.
Masalani yechish:Standart usul namunasi to'g'ridan-to'g'ri yangi operator yordamida emas, balki maxsus factory methodni chaqirish orqali ob'ektlarni yaratishni taklif qiladi. Xavotir olmang, ob'ektlar hali ham new yordamida yaratiladi, ammo bu factory methodi bilan amalga oshiriladi.
Bir qarashda bu befoyda tuyulishi mumkin: biz shunchaki konstruktorga qo'ng'iroqni dasturning bir uchidan ikkinchi uchiga o'tkazdik. Ammo endi siz o'zingiz yaratayotgan mahsulot turini o'zgartirish uchun subklassdagi factory methodni bekor qilishingiz mumkin.
Ushbu tizimning ishlashi uchun barcha qaytarilgan ob'ektlar umumiy interfeysga ega bo'lishi kerak. Subklasslar bir xil interfeysga amal qilgan holda turli sinfdagi ob'ektlarni ishlab chiqarish imkoniyatiga ega bo'ladi.
Masalan, Truck and Ship sinflari Transport interfeysini etkazib berish usuli bilan amalga oshiradi. Ushbu sinflarning har biri bu usulni o'ziga xos tarzda amalga oshiradi: yuk mashinalari yuklarni quruqlik bilan, kemalar esa dengiz orqali tashiydi. RoadLogistics sinfidagi zavod usuli yuk mashinasi ob'ektini, MarineLogistics klassi esa kema ob'ektini qaytaradi.
Factory Methodda mijozi uchun ushbu ob'ektlar o'rtasida hech qanday farq yo'q, chunki u ularni qandaydir mavhum transport sifatida ko'rib chiqadi. U uchun ob'ektni etkazib berish usuli bo'lishi muhim, ammo uning aniq ishlashi muhim emas.
Platformalararo aloqaga misol.
Factory Method dialog oynasida e'lon qilinadi. Uning kichik sinflari turli xil operatsion tizimlarga mo'ljallangan. Factory Method tufayli har bir tizim uchun dialog mantig'ini qayta yozishning hojati yo'q. Subklasslar deyarli barcha kodlarni asosiy dialog oynasidan olishlari mumkin, bu esa tugma va boshqa elementlarning turlarini o'zgartirib, asosiy kod GUI oynalarini yaratadi.
Asosiy dialog sinfi umumiy dasturlash interfeysi orqali tugmalar bilan ishlaydi. Shuning uchun, Factory Methodi tugmalarining har qanday o'zgarishini qaytaradi, dialog oynasi ishlaydi. Asosiy sinf ma'lum tugma sinflaridan mustaqil bo'lib, qaysi turdagi tugmachalarni yaratishni subklasslar qoldiradi.
Ushbu yondashuv boshqa interfeys elementlarini yaratish uchun ishlatilishi mumkin. Garchi har bir yangi element turi sizni mavhum fabrikaga yaqinlashtiradi.
// Standart usul namunasi dastur mahsulot sinflari ierarxiyasiga ega bo'lganda //qo'llaniladi.