4.1 Builder
Builder (Builder) — bu dizayn patterni, murakkab obyektni yaratish usulini taqdim etadi.
Murakkab obyektni yig'ish jarayonini uning taqdimotidan ajratib oladi, shunda bir xil yig'ish jarayonidan turli taqdimotlarni olish mumkin.
Kuchli tomonlari:
- mahsulotning ichki taqdimotini o'zgartirish imkonini beradi;
- yig'ish va taqdimotni amalga oshiruvchi kodni izolyatsiya qiladi;
- yig‘ish jarayonini yanada hushyorroq nazorat qilish imkonini beradi.
Kuchsiz tomonlari:
- murakkab obyektni yaratish algoritmi obyektning qaysi qismlardan iboratligi va ularning qanday bog'lanishiga bog'liq bo'lmasligi kerak;
- yig‘ish jarayoni yaratilayotgan obyektning turli taqdimotlarini ta’minlashi kerak.
Yaxshi misol - bu HttpRequest klassi, unda HttpRequest.Builder subklass mavjud bo‘lib, uning yordamida HttpRequest klassining nusxalarini yaratish va ularning to‘g‘riligini kafolatlash mumkin.
4.2 Lazy Initialization
Keçiktirilgan (dangasa) initsializatsiya (Lazy initialization) — bu dasturlashda biror bir resurslarni talab qiluvchi operatsiya (obyekt yaratish, qiymat hisoblash) natijasidan foydalanishdan oldin bajariladi.
Shunday qilib, initsializatsiya “talab boʻyicha” emas, balki oldindan amalga oshiriladi. Xuddi shu g‘oya har xil sohalarda qo‘llaniladi: masalan, “uchayotgan vaqtda” kompilyatsiya qilish va “Aniq vaqtida” logistik kontseptsiyasi.
Keçiktirilgan initsializatsiyaning o‘ziga xos xususiyatlaridan biri - obyektga murojaat qilingan paytda uni yaratish - yaratish dizayn patterlaridan biridir. Bu odatda Factory Method, Singleton va Proxy kabi patterlar bilan birgalikda qo'llaniladi.
Kuchli tomonlari:
- Initsializatsiya faqat zarur bo‘lgan hollarda amalga oshiriladi;
- Dastlabki dastur initsializatsiyasi tezlashtiriladi: hamma narsani kechiktirish mumkin bo‘lgan narsalar kechiktiriladi.
Kuchsiz tomonlari:
- Obyektlarning initsializatsiya tartibini aniq tarzda belgilashning iloji yo'q;
- Obyektga birinchi marta murojaat qilganda kechikish yuzaga keladi, bu esa boshqa resurslarni talab qiluvchi operatsiya bir vaqtda bajarilayotganda tanqidiy bo'lishi mumkin. Shuning uchun, ko'p yadroli dasturiy tizimlarda “dangasa” initsializatsiyaning foydaliligini yaxshilab baholash kerak bo‘ladi.
Eslaysanmi, web.xml ni yozayotganda servletlarni ishga tushirish tartibini ko'rsatish mumkin edi? Bu aynan dangasa yuklashning natijasidir. Tomcat servlet obyektlarini ularga birinchi marta murojaat qilinganda yaratadi.
4.3 Object pool
Obyekt hovuzi (object pool) — yaratish dizayn patteri, tayyorlangan va foydalanishga tayyor obyektlar to'plami. Tizimga obyekt kerak bo'lganda, u yaratilmaydi, balki hovuzdan olinadi. Obyekt kerak bo'lmaganda, u yo'q qilinmaydi, balki hovuzga qaytariladi.
Obyekt hovuzi ishlashni yaxshilash uchun qo'llaniladi, bu da ish boshlanganda obyektlarni yaratish va ish tugagandan keyin ularni yo'q qilish katta xarajatlarni talab qiladi. Ishlashning yaxshilanishi ayniqsa sezilarli bo'lishi mumkin, agar obyektlar tez-tez yaratilsa-yu, yo'q qilinadi, lekin bir vaqtning o'zida faqat kichik ular soni mavjud bo'lsa.
Obyekt hovuzi qulay bo'ladi, agar obyekt boshqa resurslarga, masalan, tarmoq soketlariga ega bo'lsa. Yoki obyektlar kolleksiyasi kompyuter xotirasining sezilarli qismini egallasa va "chiqindilar" juda ko'p yaratilsa.
Siz eslaysizmi, Tomcat har bir so'rovni alohida oqimda bajaradi. Ammo oqimlar har safar yangi yaratilmaydi, balki oqimlar hovuzida saqlanadi. Bu so'rovlarni tezroq bajarishga imkon beradi: endi oqim kerak bo'lganda, u hovuzdan olinadi. Aytgancha, savol: siz ishga tushirilgan oqimni qanday qilib hovuzga joylashtirasiz va uni hovuzdan olib chiqasiz?
GO TO FULL VERSION