JavaRush /Java blogi /Random-UZ /Java-da Davlat va Strategiya naqshlari o'rtasidagi farq
0xFF
Daraja
Донецк

Java-da Davlat va Strategiya naqshlari o'rtasidagi farq

Guruhda nashr etilgan
Asosiy Java ilovalarida Davlat va Strategiya naqshlaridan to'g'ri foydalanish uchun Java dasturchilari ular orasidagi farqni aniq tushunishlari muhimdir. Garchi ikkala naqsh, Davlat va Strategiya, o'xshash tuzilishga ega bo'lsa-da va ikkalasi ham ochiq/yopiq printsipga asoslangan bo'lib, SOLID tamoyillaridagi "O" ni ifodalaydi , ammo ular maqsadda butunlay boshqacha . Java-dagi StrategiyaJava-da Davlat va Strategiya naqshlari o'rtasidagi farq - 1 namunasi mijozga bajarish moslashuvchanligini ta'minlash uchun tegishli algoritmlar to'plamini qamrab olish uchun ishlatiladi . Mijoz ish vaqtida har qanday algoritmni ishlatadigan sinf kontekstini o'zgartirmasdan tanlashi mumkin . Strategiya naqshining ba'zi mashhur misollari shifrlash, siqish yoki saralash kabi algoritmlardan foydalanadigan kod yozishdir. Boshqa tomondan, Davlat namunasi ob'ektga turli holatlarda turlicha harakat qilish imkonini beradi. Chunki real dunyoda ob'ekt ko'pincha holatlarga ega va u turli shtatlarda o'zini boshqacha tutadi, masalan, savdo avtomati faqat shtatda bo'lsa, tovarlarni sotadi , unga tanga qo'ymaguningizcha sotilmaydi. Endi siz Strategiya va Davlat naqshlari o'rtasidagi farqni aniq ko'rishingiz mumkin, bular turli xil niyatlar. Davlat namunasi ob'ektga holatni boshqarishga yordam beradi, Strategiya namunasi esa mijozga boshqa xatti-harakatni tanlash imkonini beradi. Ko'rish oson bo'lmagan yana bir farq - bu xulq-atvorning o'zgarishiga kim sabab bo'layotgani. Strategiya namunasi bo'lsa, bu kontekstga turli strategiyalarni taqdim etadigan mijoz; Davlat namunasida o'tish kontekst yoki ob'ektning o'zi tomonidan boshqariladi. Bundan tashqari, agar siz Davlat ob'ektidagi holat o'zgarishlarini o'zingiz boshqarsangiz, kontekstga havola bo'lishi kerak, masalan, savdo avtomati kontekstning joriy holatini o'zgartirish usulini chaqira olishi kerak. Boshqa tomondan, Strategiya ob'ekti hech qachon kontekstga havolani o'z ichiga olmaydi; mijozning o'zi o'zi tanlagan strategiyani kontekstga o'tkazadi. Davlat va Strategiya naqshlari o'rtasidagi farq Java naqshlari haqidagi mashhur intervyu savollaridan biridir , Java naqshlari haqidagi ushbu maqolada biz uni batafsil ko'rib chiqamiz. Biz Java-dagi Strategiya va Davlat naqshlari o'rtasidagi o'xshashlik va farqlarni ko'rib chiqamiz, bu sizga ushbu naqshlarni tushunishingizni yaxshilashga yordam beradi. StrategyhasCoinsetState()

Davlat va Strategiya naqshlari o'rtasidagi o'xshashliklar

Agar siz Davlat va Strategiya naqshlarining UML diagrammasiga qarasangiz, ikkalasi ham bir-biriga o'xshashligini sezasiz. O'z xatti-harakatlarini o'zgartirish uchun Davlatdan foydalanadigan ob'ekt -object deb nomlanadi , xuddi shunday o'z xatti-harakatlarini o'zgartirish uchun Strategiyadan foydalanadigan ob'ekt -object Contextdeb ataladi . ContextMijoz Context-ob'ekt bilan o'zaro aloqada ekanligini unutmang. Davlat namunasi bo'lsa, kontekst joriy ob'ekt sifatida saqlanadigan Davlat ob'ektiga usullarni chaqiradi va Strategiya namunasi holatida kontekst Strategiya ob'ektini parametr sifatida ishlatadi yoki yaratish jarayonida taqdim etiladi. ob'ektning konteksti. Java-dagi holat naqshining UML diagrammasi Java-da Davlat va Strategiya naqshlari o'rtasidagi farq - 2 Davlat namunasi uchun ushbu UML diagrammasi Java-da ob'ektga yo'naltirilgan savdo avtomati dizaynini yaratishning klassik muammosini tasvirlaydi. Savdo avtomatining holati interfeys yordamida taqdim etilishini ko'rishingiz mumkin, so'ngra muayyan holatni ifodalash uchun dastur mavjud. Har bir davlat kontekstda chaqirilgan harakatlar natijasida boshqa holatga o'tish uchun ob'ekt kontekstiga havolalarga ham ega. Java-dagi strategiya naqshining UML diagrammasi. Java-da Davlat va Strategiya naqshlari o'rtasidagi farq - 3 Strategiya namunasi uchun ushbu UML diagrammasi turli xil funktsional ilovalarni o'z ichiga oladi. Saralash algoritmlari ko'p bo'lganligi sababli, ushbu dizayn namunasi mijozga ob'ektlarni saralashda algoritm tanlash imkonini beradi. Aslida, Java Collection ramkasiCollections.sort() Java-da ob'ektlarni saralash uchun ishlatiladigan usulni amalga oshirish uchun ushbu naqshdan foydalanadi . Yagona farq shundaki, mijozga tartiblash algoritmini tanlashga ruxsat berish o'rniga, u Java-ga Comparator yoki Comparable interfeysi namunasini o'tkazish orqali taqqoslash strategiyasini belgilash imkonini beradi . Keling, Java-dagi ushbu ikkita asosiy dizayn naqshlari o'rtasidagi bir nechta o'xshashliklarni ko'rib chiqaylik:
  1. Har ikkala naqsh, Davlat va Strategiya, ulardan foydalanadigan ob'ekt kontekstiga ta'sir qilmasdan, yangi holat va strategiyani qo'shishni osonlashtiradi.

  2. Ularning ikkalasi ham kodingizni ochiq/yopiq printsipga muvofiq saqlaydi , ya'ni dizayn kengaytmalar uchun ochiq, ammo o'zgartirish uchun yopiq bo'ladi. Davlat va Strategiya naqshlari holatida ob'ekt konteksti o'zgartirishlar, yangi shtatlar yoki yangi strategiyalarni joriy qilish uchun yopiq bo'ladi yoki boshqa davlat kontekstini yoki minimal o'zgarishlarni o'zgartirishingiz shart emas.

  3. Ob'ekt konteksti Davlat naqshidagi ob'ektni ishga tushirish holatidan boshlangani kabi, ob'ekt konteksti ham Java-dagi Strategiya naqshida standart strategiyaga ega.

  4. Davlat namunasi turli ob'ekt holatlari ko'rinishidagi turli xatti-harakatlarni ifodalaydi, Strategiya namunasi esa turli xil ob'ekt strategiyalari ko'rinishidagi turli xatti-harakatlarni ifodalaydi.

  5. Har ikkala naqsh, Strategiya va Davlat, xatti-harakatni amalga oshirishning kichik sinflariga bog'liq. Har bir aniq strategiya mavhum strategiyani kengaytiradi; har bir davlat interfeysning pastki sinfi yoki davlatni ifodalash uchun ishlatiladigan mavhum sinfdir.

Java-da Strategiya va Davlat naqshlari o'rtasidagi farqlar

Shunday qilib, endi biz bilamizki, Davlat va Strategiya naqshlari tuzilishi jihatidan o'xshash, ammo ularning maqsadi boshqacha. Keling, ushbu dizayn naqshlari orasidagi ba'zi asosiy farqlarni ko'rib chiqaylik.
  1. Strategiya namunasi o'zaro bog'liq algoritmlar to'plamini qamrab oladi va mijozga ish vaqtida tarkib va ​​delegatsiyaga qaramay, bir-birini almashtiradigan xatti-harakatlardan foydalanishga imkon beradi, boshqa tomondan, Davlat namunasi sinfga turli shtatlarda turli xatti-harakatlarni namoyish etishga yordam beradi.

  2. Davlat va Strategiya naqshlari o'rtasidagi keyingi farq shundaki, Shtat ob'ekt holatini qamrab oladi , Strategiya namunasi esa algoritm yoki strategiyani qamrab oladi. Holat ob'ekt bilan bog'langanligi sababli uni qayta ishlatib bo'lmaydi, lekin strategiya yoki algoritmni kontekstidan ajratish orqali biz uni qayta ishlatishimiz mumkin.

  3. Davlat modelida shaxsiy holat davlatlar o'rtasidagi o'tishni amalga oshirish uchun kontekstga havolani o'z ichiga olishi mumkin, ammo Strategiyada u ishlatiladigan kontekstga havola mavjud emas.

  4. Strategiyani amalga oshirish uni ishlatadigan ob'ektga parametr sifatida o'tkazilishi mumkin, masalan Collection.sort() strategiya bo'lgan Comparatorni oladi. Boshqa tomondan, holat ob'ekt kontekstining bir qismidir va vaqt o'tishi bilan ob'ekt konteksti bir holatdan ikkinchi holatga o'tadi.

  5. Strategiya ham, Davlat ham ochiq/yopiq tamoyilga amal qilsa-da, Strategiya ham Yagona javobgarlik tamoyiliga amal qiladi, chunki har bir strategiya individual algoritmni o'z ichiga oladi, turli strategiyalar bir-biridan mustaqildir. Bir strategiyani o'zgartirish boshqa strategiyani o'zgartirishni talab qilmaydi.

  6. Strategiya va Davlat naqshlari o'rtasidagi yana bir nazariy farq shundaki, yaratuvchi ob'ektning "qanday" qismini belgilaydi, masalan, saralash ob'ekti ma'lumotlarni "qanday" saralaydi, boshqa tomondan, Davlat namunasi "nima" va "qachon" ni belgilaydi. ob'ektning qismlari, masalan, ob'ekt ma'lum bir holatda bo'lganda nima qilishi mumkinligi.

  7. Davlat o'tish tartibi Davlat namunasida aniq belgilangan, Strategiya namunasi uchun bunday talab yo'q. Mijoz o'zi tanlagan Strategiyaning har qanday amalga oshirilishini tanlashda erkindir.

  8. Strategiya naqshining umumiy misollaridan ba'zilari tartiblash algoritmlari, shifrlash algoritmlari yoki siqish algoritmi kabi algoritmlarni inkapsulyatsiya qilishdir. Agar kodingiz turli xil turdagi algoritmlardan foydalanishi kerakligini ko'rsangiz, Strategiya naqshidan foydalanishni o'ylab ko'rishingiz kerak. Boshqa tomondan, Davlat namunasidan foydalanishni tanib olish juda oson, agar siz holat va holat oʻtishlarini koʻp sonli shartli iboralarsiz boshqarishingiz kerak boʻlsa, Davlat namunasi foydalanish uchun toʻgʻri namunadir.

  9. Davlat va Strategiya naqshlari o'rtasidagi oxirgi, lekin eng muhim farqlardan biri shundaki, Strategiyaga o'zgartirish Mijoz tomonidan amalga oshiriladi, Holbuki holatga o'zgartirish esa kontekst yoki ob'ekt holatining o'zi tomonidan amalga oshirilishi mumkin.

Bu Java'dagi Davlat va Strategiya naqshlari o'rtasidagi farq haqida . Aytganimdek, ikkalasi ham o'z sinflarida va UML diagrammalarida o'xshash ko'rinadi, ikkalasi ham ochiq/yopiq tamoyillarni ta'minlaydi va xatti-harakatlarni qamrab oladi. Ishlash vaqtida kontekstga ta'sir qiladigan algoritm yoki strategiyani, ehtimol parametr yoki kompozit ob'ekt sifatida inkapsulyatsiya qilish uchun Strategiya naqshidan foydalaning va Java-da holat o'tishlarini boshqarish uchun Davlat naqshidan foydalaning. Original bu yerda
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION