2.1 State
Holat (State) — xulq-atvori dizayn shabloni. Dastur bajarilishi davomida ob'ekt o'z holatiga qarab o'z xatti-harakatini o'zgartirishi kerak bo'lgan holatlar uchun qo'llaniladi.
Pattern 3 blokdan iborat:
Context — klass, uning ob'yektlari holatga qarab o'z xatti-harakatini o'zgartirishi kerak.
State — har bir o'ziga xos holatni amalga oshirishi kerak bo'lgan interfeys. Ushbu interfeys orqali Context ob'yekti holat bilan o'zaro ta'sir qiladi, unga metodlarni chaqirishni delegatsiya qiladi. Interfeys ob'ekt bilan o'zaro teskari aloqani ta'minlash uchun vositalarga ega bo'lishi kerak, bu ob'ektning xatti-harakatini o'zgartirishi kerak.
Buning uchun hodisa (Publisher — Subscriber pattern) ishlatiladi. Bu dasturni amalga oshirish jarayonida voqealar sodir bo'lganda holat ob'ektini almashtirish uchun zarurdir. Ba'zi hollarda Context o'zi holat ob'ektidan o'tishni tekshirishi mumkin.
ConcreteState1, ConcreteState2 — konkret holatlar klasslari. Ular ob'ektning qaysi sharoitlarda va qaysi holatlarda joriy holatdan o'tishi mumkinligini bilishi kerak. Masalan, ConcreteState1 dan ob'ekt ConcreteState2 va ConcreteState3 ga o'tishi mumkin, ConcreteState2 dan esa yana ConcreteState1 ga qaytishi mumkin va hokazo. Ulardan birining ob'yekti yaratilish paytida Context-ni o'z ichiga olishi kerak.
Masalan, siz o'yin yaratayapsiz, unda belgi yugurishi, suzishi va uchishi mumkin. Agar sizning belgingiz suvga tushib qolsa, uning suvdagi xatti-harakatini cheklash mantiqan to'g'ri bo'ladi: endi u otib bo'lmaydi, lekin u ba'zi harakatlarni saqlab qoladi: oldinga, o'ngga, chapga suzish va hokazo.
Sizning belgingiz holatini State ob'yekti bilan tavsiflash mumkin, unda chaqirilishi mumkin bo'lgan va ba'zi ishlarni bajaradigan metodlar mavjud. Va sizning belgini suvga tushgandan so'ng, siz oddiygina uning ichida boshqa State ob'ektiga havolani o'zgartirasiz — va u o'z holatini o'zgartiradi.
2.2 Strategy
Strategiya (Strategy) — xulq-atvori dizayn shabloni, algoritmlar oilasini belgilash, ularning har birini inkapsulatsiya qilish va ularni o'zaro almashtirishni ta'minlash uchun mo'ljallangan. Bu tegishli klassni aniqlash orqali algoritmni tanlash imkonini beradi.
Strategy shabloni tanlangan algoritmni uni ishlatadigan mijoz ob'ektlaridan mustaqil ravishda o'zgartirish imkonini beradi.
Strategy pattern kontekstga qarab turli biznes qoidalari yoki algoritmlarni qo'llash imkonini beradi. Tizimning joriy holatiga (yoki uning muhitiga) qarab bir joyda turli algoritmlar ishlatilishi kerak bo'lganda qo'llaniladi.
Kuchli tomonlari:
- turli algoritmlarni amalga oshirishning inkapsulatsiyasi, tizim biznes qoidalarining mumkin bo'lgan o'zgarishlaridan mustaqil bo'ladi;
- barcha algoritmlarni standart usulda chaqirish;
- switch yoki shart operatorlaridan voz kechish.
Ushbu pattern qisman State patterniga o'xshaydi, lekin bu yerda urg'u holatga emas, balki xatti-harakatga qaratilgan. Misol uchun, sizning o'yiningizdagi belgi qurolni almashtirishi mumkin. Keyin qurol almashganda, u qanday ishlashini tavsiflovchi ob'ektga havolani oddiygina almashtirishingiz mumkin.
2.3 Template Method
Abstract class (abstrakt klass) — algoritm qadamlarini amalga oshirish uchun vorislarida almashtiriladigan abstrakt operatsiyalarni belgilaydi; algoritm skeletini belgilovchi shablon metodini amalga oshiradi. Shablon metod almashtiriladigan va Abstract classda aniqlangan boshqa operatsiyalarni chaqiradi.
Concrete class (konkret klass) — almashtiriladigan operatsiyalarni zarur tarzda amalga oshiradi. Concrete class invaryant algoritm qadamlarining AbstractClassda bajarilishini taxmin qiladi.
Ushbu pattern ko'pincha quyidagilarga muhtoj bo'lganda ishlatiladi:
- Algoritmning invariant qismini bir marta foydalanib, o'zgaruvchan qismini vorislarga qoldirish.
- Bir nechta klasslar uchun umumiy kodni lokalizatsiya qilish va ajratish orqali takrorlanishni oldini olish.
- Kodni vorislarga faqat ma'lum joylarda kengaytirishga ruxsat berish.
Ha, bu pattern abstrakt klass va uning amalga oshirilishini o'z ichiga olgan juftlikni tavsiflaydi.
2.4 Chain of Responsibility
Mas'uliyat zanjiri (Chain of responsibility) — tizimda mas'uliyat darajalarini tashkil qilish uchun xulq-atvoriy dizayn shabloni
Pattern quyidagi sharoitlarda ishlatish tavsiya etiladi:
- ishlab chiqilayotgan tizimda ma'lum turdagi xabarlarni qayta ishlashga qodir bo'lgan ob'ektlar guruhi mavjud bo'lsa;
- barcha xabarlar tizimdagi kamida bitta ob'ekt tomonidan qayta ishlanishi kerak bo'lsa;
- xabarlar tizimda "o'zing qayta ishlash yoki boshqasiga yubor" tizimi bo'yicha qayta ishlanadi, ya'ni ba'zi xabarlar olingan darajada qayta ishlanadi, boshqalari esa boshqa darajadagi ob'ektlarga yuboriladi.
2.5 Memento
Memento — xulq-atvoriy dizayn shabloni, inkapsulyatsiyani buzmasdan ob'ektning ichki holatini saqlash va saqlash, shunda keyinchalik uni ushbu holatga qaytarish imkonini beradi.
Memento pattern quyidagi hollarda ishlatiladi:
- ob'ektning holati (yoki uning bir qismi) ko'chirmasini saqlash va keyinchalik tiklash zarur bo'lsa;
- ob'ekt holatini olishning to'g'ridan-to'g'ri interfeysi ob'ektning inkapsulyatsiyasini buzadigan tafsilotlarni ochib beradi.
GO TO FULL VERSION