JavaRush /Java блогы /Random-KK /Java тіліндегі мемлекет пен стратегия үлгілерінің арасынд...
0xFF
Деңгей
Донецк

Java тіліндегі мемлекет пен стратегия үлгілерінің арасындағы айырмашылық

Топта жарияланған
Негізгі Java қолданбаларында күй және стратегия үлгілерін дұрыс пайдалану үшін Java бағдарламашыларына олардың арасындағы айырмашылықты анық түсіну маңызды. Екі үлгінің де, Мемлекет пен Стратегияның құрылымы ұқсас және екеуі де SOLID принциптеріндегі «O» белгісін білдіретін ашық/жабық принципке негізделгенімен, олардың ниеті мүлде басқа . Java тіліндегі стратегияJava тіліндегі мемлекет пен стратегия үлгілерінің айырмашылығы - 1 үлгісі клиентке орындау икемділігін қамтамасыз ету үшін байланысты алгоритмдер жиынын инкапсуляциялау үшін пайдаланылады . Клиент орындалу уақытында қолданатын сыныптың контекстін өзгертпестен кез келген алгоритмді таңдай алады . Стратегия үлгісінің кейбір танымал мысалдары шифрлау, қысу немесе сұрыптау сияқты алгоритмдерді пайдаланатын codeты жазу болып табылады. Екінші жағынан, күй үлгісі нысанға әртүрлі күйлерде әртүрлі әрекет етуге мүмкіндік береді. Өйткені нақты әлемде an objectінің жиі күйлері болады және ол әртүрлі күйлерде өзін басқаша ұстайды, мысалы, сауда автоматы күйде болса ғана тауарды сатады , оған тиын салмайынша сатпайды. Енді сіз Стратегия мен Мемлекет үлгілерінің арасындағы айырмашылықты анық көре аласыз, бұл әртүрлі ниеттер. Күй үлгісі нысанға күйді басқаруға көмектеседі, ал Стратегия үлгісі клиентке басқа әрекетті таңдауға мүмкіндік береді. Көру оңай емес тағы бір айырмашылық - мінез-құлықтың өзгеруіне кім себепші. Стратегия үлгісі жағдайында бұл контекстке әртүрлі стратегияларды ұсынатын клиент; Күй үлгісінде ауысу контекст немесе нысанның өзі арқылы басқарылады. Оған қоса, күй нысанындағы күй өзгерістерін өзіңіз басқарсаңыз, контекстке сілтеме болуы керек, мысалы, сауда автоматы контексттің ағымдағы күйін өзгерту әдісін шақыра алуы керек. Екінші жағынан, Strategy нысанында ешқашан контекстке сілтеме болмайды; клиент өзі таңдаған Стратегияны мәтінмәнге береді. Мемлекет пен стратегия үлгілерінің арасындағы айырмашылық Java үлгілері туралы танымал сұхбат сұрақтарының бірі болып табылады , Java үлгілері туралы осы мақалада біз оны мұқият қарастырамыз. Біз Java тіліндегі Стратегия мен Күй үлгілері арасындағы кейбір ұқсастықтар мен айырмашылықтарды зерттейміз, бұл сізге осы үлгілерді түсінуіңізді жақсартуға көмектеседі. StrategyhasCoinsetState()

Мемлекет пен Стратегия үлгілерінің ұқсастықтары

Мемлекет және Стратегия үлгілерінің UML диаграммасын қарасаңыз, екеуінің де бір-біріне ұқсайтынын байқайсыз. Өз әрекетін өзгерту үшін күйді пайдаланатын нысан -an object ретінде белгілі , сол сияқты мінез-құлқын өзгерту үшін Стратегияны пайдаланатын нысан -an object Contextдеп аталады . ContextКлиент Context-an objectімен әрекеттесетінін есте сақтаңыз. Күй үлгісі жағдайында контекст ағымдағы нысан ретінде ұсталатын Күй нысанына әдістерді шақырады, ал Стратегия үлгісі жағдайында контекст Strategy нысанын параметр ретінде пайдаланады немесе жасау кезінде қамтамасыз етіледі. an objectінің контексі. Java тіліндегі күй үлгісінің UML диаграммасы Java тіліндегі мемлекет пен стратегия үлгілерінің айырмашылығы - 2 Күй үлгісіне арналған бұл UML диаграммасы Java тілінде an objectіге бағытталған сауда автоматының дизайнын жасаудың классикалық мәселесін бейнелейді. Сауда автоматының күйі интерфейс арқылы ұсынылғанын көре аласыз, содан кейін нақты күйді көрсету үшін іске асыру бар. Әрбір күйде контексте шақырылған әрекеттер нәтижесінде басқа күйге өту үшін нысан контекстіне сілтемелер де болады. Java тіліндегі стратегия үлгісінің UML диаграммасы Java тіліндегі мемлекет пен стратегия үлгілерінің айырмашылығы - 3 Стратегия үлгісіне арналған бұл UML диаграммасы сұрыптардың функционалды іске асырылуын қамтиды. Сұрыптау алгоритмдері көп болғандықтан, бұл дизайн үлгісі клиентке an objectілерді сұрыптау кезінде алгоритмді таңдауға мүмкіндік береді. Шындығында, Java Collection құрылымыCollections.sort() Java тілінде нысандарды сұрыптау үшін қолданылатын әдісті жүзеге асыру үшін осы үлгіні пайдаланады . Жалғыз айырмашылық - клиентке сұрыптау алгоритмін таңдауға рұқсат берудің орнына ол Java-ға Comparator немесе Comparable интерфейсінің данасын беру арқылы салыстыру стратегиясын көрсетуге мүмкіндік береді . Java тіліндегі осы екі негізгі дизайн үлгісі арасындағы бірнеше ұқсастықтарды қарастырайық:
  1. Күй және Стратегия екі үлгі де оларды пайдаланатын нысанның мәтінмәніне әсер етпестен жаңа күй мен стратегияны қосуды жеңілдетеді.

  2. Олардың екеуі codeты ашық/жабық принципіне сәйкес сақтайды , яғни дизайн кеңейтімдерге ашық, бірақ өзгертуге жабық болады. Күй және Стратегия үлгілері жағдайында нысанның мәтінмәні өзгертулерге, жаңа мемлекеттерді немесе жаңа стратегияларды енгізуге жабық немесе басқа күйдің мәтінмәнін немесе ең аз өзгерістерді өзгерту қажет емес.

  3. Нысан мәтінмәні Күй үлгісіндегі нысанның инициализация күйінен басталатыны сияқты, Java тіліндегі Стратегия үлгісі жағдайында нысан контекстінде де әдепкі стратегия болады.

  4. Күй үлгісі әртүрлі нысан күйлері түріндегі әртүрлі мінез-құлықтарды көрсетеді, ал Стратегия үлгісі әртүрлі нысан стратегиялары түріндегі әртүрлі әрекеттерді көрсетеді.

  5. Екі үлгі де, Стратегия және Мемлекет, мінез-құлықты жүзеге асырудың ішкі сыныптарына байланысты. Әрбір нақты стратегия дерексіз стратегияны кеңейтеді; әрбір күй мемлекетті көрсету үшін пайдаланылатын интерфейстің ішкі сыныбы немесе дерексіз класс болып табылады.

Java тіліндегі стратегия мен күй үлгілерінің арасындағы айырмашылықтар

Енді біз Мемлекет пен Стратегия үлгілері құрылымы жағынан ұқсас, бірақ олардың мақсаты басқа екенін білеміз. Осы дизайн үлгілері арасындағы кейбір негізгі айырмашылықтарды қарастырайық.
  1. Стратегия үлгісі байланысты алгоритмдер жинағын қамтиды және клиентке орындалу уақытында құрамға және өкілдікке қарамастан өзара алмастырылатын әрекеттерді пайдалануға мүмкіндік береді, екінші жағынан, күй үлгісі сыныпқа әртүрлі күйлерде әртүрлі мінез-құлықтарды көрсетуге көмектеседі.

  2. Күй мен Стратегия үлгілерінің келесі айырмашылығы мынада: Күй нысанның күйін қамтиды , ал Стратегия үлгісі алгоритмді немесе стратегияны инкапсуляциялайды. Күй нысанмен байланысты болғандықтан оны қайта пайдалану мүмкін емес, бірақ стратегияны немесе алгоритмді оның контекстен ажырату арқылы біз оны қайта пайдалана аламыз.

  3. Күй үлгісінде жеке күйде мемлекеттер арасындағы ауысуды жүзеге асыру үшін мәтінмәнге сілтеме болуы мүмкін, бірақ Стратегияда ол қолданылатын контекстке сілтеме жоқ.

  4. Стратегияны іске асыру оны пайдаланатын нысанға параметр ретінде берілуі мүмкін, мысалы Collection.sort() стратегия болып табылатын Comparator пайдаланады. Екінші жағынан, күй an objectінің контекстінің бөлігі болып табылады және уақыт өте келе an object контексті бір күйден екінші күйге ауысады.

  5. Стратегия да, Мемлекет те ашық/жабық принципті ұстанса да, Стратегия Бірыңғай жауапкершілік қағидатын ұстанады, өйткені әрбір стратегияда жеке алгоритм бар, әр түрлі стратегиялар бір-бірінен тәуелсіз. Бір стратегияны өзгерту басқа стратегияны өзгертуді қажет етпейді.

  6. Стратегия мен күй үлгілерінің тағы бір теориялық айырмашылығы мынада: жасаушы нысанның «қалай» бөлігін анықтайды, мысалы, «қалай» сұрыптау нысаны деректерді сұрыптайды, екінші жағынан күй үлгісі «не» және «қашан» бөліктерін анықтайды. an objectінің, мысалы, an object белгілі бір күйде болғанда не істей алады.

  7. Мемлекеттің ауысу тәртібі Мемлекеттік үлгіде жақсы анықталған, Стратегия үлгісіне мұндай талап жоқ. Клиент өз таңдауы бойынша Стратегияның кез келген іске асырылуын таңдай алады.

  8. Стратегия үлгісінің кейбір жалпы мысалдары сұрыптау алгоритмдері, шифрлау алгоритмдері немесе қысу алгоритмі сияқты алгоритмдердің инкапсуляциясы болып табылады. Кодыңызда байланысты алгоритмдердің әртүрлі түрлерін пайдалану керек екенін көрсеңіз, Стратегия үлгісін пайдалануды қарастырған жөн. Екінші жағынан, Күй үлгісін пайдалануды тану өте оңай, егер көптеген кірістірілген шартты мәлімдемелерсіз күй мен күйлер арасындағы ауысуларды басқару қажет болса, күй үлгісін пайдалану үшін дұрыс үлгі болып табылады.

  9. Мемлекет пен Стратегия үлгілері арасындағы соңғы, бірақ ең маңызды айырмашылықтардың бірі Стратегияға өзгертуді Клиент жүзеге асырады, ал Күйге өзгерту контекст немесе нысан күйінің өзі арқылы жүзеге асырылуы мүмкін.

Мұның бәрі Java тіліндегі мемлекет пен стратегия үлгілерінің айырмашылығы туралы . Мен айтқанымдай, екеуі де сыныптары мен UML диаграммаларында ұқсас көрінеді, екеуі де ашық/жабық принциптерді қамтамасыз етеді және мінез-құлықты инкапсуляциялайды. Орындау уақытында контекстке, мүмкін параметр немесе құрама нысан ретінде әсер ететін алгоритмді немесе стратегияны инкапсуляциялау үшін Стратегия үлгісін пайдаланыңыз және Java тіліндегі күй ауысуларын басқару үшін күй үлгісін пайдаланыңыз. Түпнұсқа осында
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION