Yaratish Patternlari

All lectures for UZ purposes
Daraja, Dars
Mavjud

3.1 Singleton

Singleton (Singleton) — bu bitta nusxani kafolatlaydigan va unga global kirishni ta'minlaydigan dizayn patterni.

Singleton (Singleton)

Ko'pincha dasturlashni endi boshlaganlar statik sinfda bitta joyga to'plashadi – faqat statik metodlardan iborat sinf. Bunday yondashuvda kamchiliklar bor – masalan, bunday sinf obyektiga havola qilish mumkin emas, bunday metodlarni sinovdan o'tkazish qiyin va boshqalar.

Muqobil yechim sifatida singleton sinf taklif qilindi: faqat bitta obyektga ega bo'lishi mumkin bo'lgan sinf. Agar bunday obyekt yaratilmoqchi bo'lsa, u faqat mavjud bo'lmaganda yaratiladi, aks holda mavjud bo'lgan nusxaga havola qaytariladi.

Muhimi, sinf nusxasidan foydalanish mumkinki, ko'pgina hollarda kengroq funksionallikni ochib beradi. Masalan, bu sinf ba'zi interfeyslarni amalga oshirishi mumkin va uning obyektini boshqa metodlarga interfeysning amalga oshirilishi sifatida uzatish mumkin. Bu statik metodlar to'plami bilan amalga oshirib bo'lmaydi.

Plyuslari:

  • Metodlar obyektga bog'liq, statik sinfga emas – obyektni havola orqali uzatish mumkin.
  • Obyekt metodlarini sinovdan o'tkazish va moklash osonroq.
  • Obyekt kerak bo'lganida yaratiladi: obyektning kechiktirilgan initsializatsiyasi.
  • Dastur yuki tezlashadi, agar ko'p singletonlar kerak bo'lmasa.
  • Singletonni keyinchalik strategiya yoki bir nechta bunday obyektlarga aylantirish mumkin.

Kamchiliklari:

  • Ko'p oqimli raqobat va kechikishlarni boshqarish qiyinlashtiradi.
  • Ko'p oqimli "singleton"ni boshdan yozish qiyin: uzoq vaqt davomida yaratilgan singletonga kirish ideal holda mutexni ochmasligi kerak. Yaxshisi tekshirilgan yechimlar.
  • Ikki oqim yaratilmagan singleton ustida kurashsa, kechikishga olib keladi.
  • Agar obyekt uzoq vaqt davomida yaratilsa, kechikish foydalanuvchiga to'sqinlik qilishi yoki real vaqtni buzishi mumkin. Bunday holda, uni dastur initsializatsiya bosqichiga o'tkazish yaxshiroqdir.
  • Modul sinovlari uchun maxsus funktsiyalar talab etiladi — masalan, kutubxonani "non-singleton" rejimiga o'tkazish va testlarni bir-biridan to'liq ajratish uchun.
  • Tayyor dasturiy ta'minotni sinash uchun maxsus taktika talab qilinadi, chunki "eng oddiy ishlash" tushunchasi yo'qoladi, chunki ishlash konfiguratsiyaga bog'liq.

3.2 Factory [Method]

Fabrik Metodi (Factory Method) — bu porloq dizayn patterni bo'lib, subclasslarga (merosxo'r sinflarga) ba'zi sinflarning nusxalarini yaratish uchun interfeysni taqdim etadi. Yaratish vaqtida merosxo'rlar qaysi sinfni yaratishni belgilashlari mumkin.

Boshqacha qilib aytganda, ushbu pattern obyekt yaratishni ota-ona sinf merosxo'rlariga delegatsiya qiladi. Bu dastur kodida aniq sinflarni emas, balki yuqori darajada abstrakt obyektlar bilan ishlash imkonini beradi.

Fabrik Metodi (Factory Method)

Ushbu pattern obyekti yaratish uchun interfeysni aniqlaydi, lekin obyektni qaysi sinfga asoslangan holda yaratishni aniqlashni subclasslarga qoldiradi. Fabrik metodi sinfga subclass yaratishni delegatsiya qilish imkonini beradi. Quyidagi hollarda ishlatiladi:

  • sinfning oldindan qaysi subclass obyektlarini yaratishi kerakligi noma'lum.
  • sinf loyihalashtirilgan bo'lib, yaratilgan obyektlar subclasslar tomonidan belgilangan.
  • sinf o'z vazifalarini bir necha yordamchi subclasslardan biriga delegatsiya qiladi va ushbu vazifalarni qaysi sinf qabul qilishi belgilanadi.

3.3 Abstract Factory

Abstract Factory (Abstract factory) — bu dizayn patterni bo'lib, o'zaro bog'liq yoki o'zaro bog'liq obyektlar oilasini yaratish uchun interfeysni taqdim etadi, ular aniq sinflarini belgilamaydi.

Pattern abstract sinf Factory yaratish yo'li bilan amalga oshiriladi, u tizim komponentlarini yaratish uchun interfeys sifatida ishlaydi (masalan, oyna interfeysi uchun u oynalar va tugmalar yaratishi mumkin). Keyinchalik ushbu interfeysni amalga oshiruvchi sinflar yoziladi.

Abstract Factory (Abstract factory)

Dastur yangi obyektlarni yaratish jarayoni va turlaridan mustaqil bo'lishi kerak bo'lganda qo'llaniladi. O'zaro bog'liq obyektlar oilasi yoki guruhlarini yaratish zarur bo'lganda qo'llaniladi, bir vaqtning o'zida ushbu to'plamlarning turli obyektlaridan bir kontekstdagi foydalanish imkoniyatini istisno qiladi.

Kuchli tomonlari:

  • aniq sinflarni izolyatsiya qiladi;
  • mahsulotlar oilasini almashtirishni osonlashtiradi;
  • mahsulotlarning uyg'unligini kafolatlaydi.

Aytaylik, dasturing fayl tizimi bilan ishlaydi. Keyin Linux uchun LinuxFile, LinuxDirectory, LinuxFileSystem obyektlari kerak bo'ladi. Windows uchun esa WindowsFile, WindowsDirectory, WindowsFileSystem sinflar kerak bo'ladi.

Path sinfi, Path.of() orqali yaratiladi, aynan shunday holat. Path - bu aslida sinf emas, interfeys va uning WindowsPath va LinuxPath amalga oshirilgan variantlari mavjud. Ammo qaysi obyekt yaratilishini koddan yashirilgan va dastur ishlayotgan paytda hal qilinadi.

3.4 Prototype

Prototype (Prototype) — bu dizayn patterni bo'lib.

Ushbu pattern prototip-nusxa yordamida yaratiladigan obyekt turlarini belgilaydi va yangi obyektlarni ushbu prototipni nusxalash orqali hosil qiladi. Bu amalga oshirishdan voz kechish va “interfeyslar orqali dasturlash” printsipiga rioya qilish imkonini beradi.

Qaytaruvchi tur sifatida ierarxiyaning yuqorisidagi interfeys/abstrakt sinf ko'rsatiladi va merosxo'r sinflar unga ushbu turga oid merosxo'rni joylashtirishlari mumkin. Oddiy qilib aytganda, bu obyektni yaratuvchi boshqa obyektdan klonlash orqali, konstruktordan foydalanmasdan yaratish patterndir.

Prototype (Prototype)

Pattern ishlatiladi, agar:

  • obyektni standart yo'l bilan yaratish qo'shimcha qiyinchilikdan qochish zarur bo'lsa (bu konstruktordan foydalanishni anglatadi, chunki bu holda obyekt oldingilarining butun ierarxiyasi konstruktori chaqiriladi), bu dasturning qimmatiga qimmat qo'shadi.
  • obyekt yaratuvchisining mijoz dasturida (client application) meros olishdan qochish zarur, abstract factory patterni kabi.

Ushbu patternni dasturingda mahsulotlar qanday yaratilishi, kompozitsiyalanishi va ifodalanishi muhim bo'lmaganida foydalan:

  • instansiyalanadigan sinflar ish vaqtida aniqlangan, masalan, dinamik yuklash orqali;
  • sinf yoki fabrikalar iyerarxiyasini yoki iyerarxiyasiga parallel sinflarini qurishdan qochmoqchi bo'lsang;
  • sinf nusxalari bir nechta turli holatlarda bo'lishi mumkin. Shunda ularga muvofiq prototiplarni o'rnatish va klonlash qulayroq bo'lishi mumkin, har safar sinfni qo'lda instansiyalamokdan ko'ra.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION