JavaRush /Java Blog /Random-TL /Pagkakaiba sa pagitan ng mga pattern ng Estado at Strateg...
0xFF
Antas
Донецк

Pagkakaiba sa pagitan ng mga pattern ng Estado at Strategy sa Java

Nai-publish sa grupo
Upang maayos na magamit ang mga pattern ng Estado at Diskarte sa mga pangunahing aplikasyon ng Java, mahalaga para sa mga programmer ng Java na malinaw na maunawaan ang pagkakaiba sa pagitan ng mga ito. Bagama't ang parehong mga pattern, Estado at Diskarte, ay may magkatulad na istraktura, at pareho ay batay sa bukas/sarado na prinsipyo, na kumakatawan sa "O" sa mga SOLID na prinsipyo , ganap na naiiba ang mga ito sa layunin . Ang StrategyPagkakaiba sa pagitan ng mga pattern ng Estado at Strategy sa Java - 1 pattern sa Java ay ginagamit upang i-encapsulate ang mga nauugnay na hanay ng mga algorithm upang magbigay ng flexibility ng pagpapatupad sa kliyente. Ang kliyente ay maaaring pumili ng anumang algorithm sa runtime nang hindi binabago ang konteksto ng klase na gumagamit ng . Ang ilang sikat na halimbawa ng pattern ng Strategy ay ang pagsulat ng code na gumagamit ng mga algorithm, gaya ng pag-encrypt, compression, o pag-uuri. Sa kabilang banda, pinapayagan ng pattern ng Estado ang isang bagay na kumilos nang iba sa iba't ibang mga estado. Dahil sa totoong mundo ang isang bagay ay madalas na may mga estado, at ito ay kumikilos nang iba sa iba't ibang mga estado, halimbawa, ang isang vending machine ay nagbebenta lamang ng mga kalakal kung ito ay nasa estado , hindi ito nagbebenta hangga't hindi ka naglalagay ng barya. Ngayon ay malinaw mong makikita ang pagkakaiba sa pagitan ng Strategy at State patterns, ito ay magkaibang intensyon. Ang pattern ng Estado ay tumutulong sa isang bagay na pamahalaan ang estado, habang ang pattern ng Diskarte ay nagpapahintulot sa kliyente na pumili ng ibang gawi. Ang isa pang pagkakaiba na hindi madaling makita ay kung sino ang nagtutulak ng pagbabago sa pag-uugali. Sa kaso ng pattern ng Strategy, ito ay isang kliyente na nagbibigay ng iba't ibang mga diskarte sa konteksto; sa pattern ng Estado, ang paglipat ay kinokontrol ng konteksto o ang estado ng mismong bagay. Bukod pa rito, kung ikaw mismo ang namamahala sa mga pagbabago ng estado sa object ng Estado, dapat mayroong reference sa konteksto, halimbawa, ang isang vending machine ay dapat na makatawag ng isang paraan upang baguhin ang kasalukuyang estado ng konteksto. Sa kabilang banda, ang object ng Diskarte ay hindi kailanman naglalaman ng isang sanggunian sa konteksto; ipinapasa mismo ng kliyente ang Diskarte na pinili nito sa konteksto. Ang pagkakaiba sa pagitan ng mga pattern ng Estado at Strategy ay isa sa mga tanyag na tanong sa panayam tungkol sa mga pattern ng Java , sa artikulong ito sa mga pattern ng Java ay titingnan natin ito nang mas malapitan. Tuklasin namin ang ilang pagkakatulad at pagkakaiba sa pagitan ng mga pattern ng Strategy at State sa Java na makakatulong sa iyong pagbutihin ang iyong pag-unawa sa mga pattern na ito. StrategyhasCoinsetState()

Pagkakatulad sa pagitan ng mga pattern ng Estado at Diskarte

Kung titingnan mo ang UML diagram ng mga pattern ng Estado at Diskarte, mapapansin mo na pareho ang hitsura sa isa't isa. Ang isang bagay na gumagamit ng Estado upang baguhin ang pag-uugali nito ay kilala bilang Contextisang -object, katulad ng isang object na gumagamit ng Strategy upang baguhin ang pag-uugali nito ay tinutukoy bilang Contextisang -object. Tandaan na ang kliyente ay nakikipag-ugnayan sa Context-object. Sa kaso ng pattern ng Estado, ang konteksto ay nagde-delegate ng mga paraan ng pagtawag sa isang bagay ng Estado, na kung saan ay gaganapin bilang ang kasalukuyang bagay, at sa kaso ng pattern ng Diskarte, ang konteksto ay gumagamit ng Strategy object bilang isang parameter o ibinibigay sa panahon ng paglikha ng konteksto ng bagay. UML diagram ng State pattern sa Java Pagkakaiba sa pagitan ng mga pattern ng Estado at Strategy sa Java - 2 Ang UML diagram na ito para sa State pattern ay naglalarawan ng klasikong problema sa paglikha ng object-oriented na disenyo ng vending machine sa Java. Makikita mo na ang estado ng vending machine ay kinakatawan gamit ang isang interface, na pagkatapos ay mayroong pagpapatupad upang kumatawan sa partikular na estado. Ang bawat estado ay mayroon ding mga sanggunian sa konteksto ng bagay upang gumawa ng paglipat sa isa pang estado bilang resulta ng mga pagkilos na tinatawag sa konteksto. UML diagram ng Strategy pattern sa Java Pagkakaiba sa pagitan ng mga pattern ng Estado at Strategy sa Java - 3 Ang UML diagram na ito para sa Strategy pattern ay naglalaman ng mga functional na pagpapatupad ng mga uri. Dahil maraming mga algorithm sa pag-uuri, ang pattern ng disenyo na ito ay nagbibigay-daan sa kliyente na pumili ng isang algorithm kapag nag-uuri ng mga bagay. Sa katunayan, ginagamit ng balangkas ng Java Collection ang pattern na ito upang ipatupad ang isang paraan Collections.sort()na ginagamit upang pagbukud-bukurin ang mga bagay sa Java. Ang pagkakaiba lang ay sa halip na payagan ang kliyente na pumili ng algorithm ng pag-uuri, pinapayagan nitong tukuyin ang diskarte sa paghahambing sa pamamagitan ng pagpasa ng isang halimbawa ng Comparator o Comparable interface sa Java . Tingnan natin ang ilang pagkakatulad sa pagitan ng dalawang pangunahing pattern ng disenyo sa Java:
  1. Ang parehong mga pattern, Estado at Diskarte, ay ginagawang madali upang magdagdag ng bagong estado at diskarte nang hindi naaapektuhan ang konteksto ng bagay na gumagamit sa kanila.

  2. Pareho sa mga ito ay nagpapanatili ng iyong code ayon sa bukas/sarado na prinsipyo , ibig sabihin ang disenyo ay bukas sa mga extension ngunit sarado sa pagbabago. Sa kaso ng mga pattern ng Estado at Diskarte, ang konteksto ng bagay ay sarado sa mga pagbabago, ang pagpapakilala ng mga bagong Estado o bagong Istratehiya, o hindi mo kailangang baguhin ang konteksto ng ibang estado, o kaunting pagbabago.

  3. Kung paanong nagsisimula ang konteksto ng object sa estado ng pagsisimula ng object sa pattern ng Estado, ang konteksto ng object ay mayroon ding default na diskarte sa kaso ng pattern ng Strategy sa Java.

  4. Ang pattern ng Estado ay kumakatawan sa iba't ibang mga pag-uugali sa anyo ng iba't ibang mga estado ng object, habang ang pattern ng Strategy ay kumakatawan sa iba't ibang mga pag-uugali sa anyo ng iba't ibang mga diskarte sa object.

  5. Ang parehong mga pattern, Diskarte at Estado, ay nakasalalay sa mga subclass ng pagpapatupad ng pag-uugali. Ang bawat kongkretong diskarte ay nagpapalawak ng isang Abstract Strategy; ang bawat estado ay isang subclass ng isang interface o abstract na klase na ginagamit upang kumatawan sa Estado.

Mga pagkakaiba sa pagitan ng Strategy at State pattern sa Java

Kaya ngayon alam na natin na ang mga pattern ng Estado at Diskarte ay magkatulad sa istraktura, ngunit ang kanilang layunin ay iba. Tingnan natin ang ilang pangunahing pagkakaiba sa pagitan ng mga pattern ng disenyo na ito.
  1. Ang pattern ng Strategy ay sumasaklaw sa isang hanay ng mga nauugnay na algorithm, at nagbibigay-daan sa kliyente na gumamit ng mga mapagpapalit na pag-uugali sa kabila ng komposisyon at delegasyon sa runtime, sa kabilang banda, ang pattern ng Estado ay tumutulong sa isang klase na magpakita ng iba't ibang mga pag-uugali sa iba't ibang mga estado.

  2. Ang susunod na pagkakaiba sa pagitan ng mga pattern ng Estado at Diskarte ay ang Estado ay sumasaklaw sa estado ng isang bagay, samantalang ang pattern ng Diskarte ay naka-encapsulate ng isang algorithm o diskarte. Dahil ang estado ay nauugnay sa isang bagay, hindi ito magagamit muli, ngunit sa pamamagitan ng pag-decoupling ng isang diskarte o algorithm mula sa konteksto nito, maaari nating gamitin muli ito.

  3. Sa pattern ng Estado, ang isang personal na estado ay maaaring maglaman ng isang sanggunian sa konteksto upang ipatupad ang mga paglipat sa pagitan ng mga estado, ngunit ang isang Diskarte ay hindi naglalaman ng isang sanggunian sa konteksto kung saan ito ginagamit.

  4. Ang pagpapatupad ng isang Strategy ay maaaring ipasa bilang isang parameter sa object na gagamit nito, halimbawa Collection.sort() ay kumukuha ng Comparator na isang diskarte. Sa kabilang banda, ang estado ay bahagi ng mismong konteksto ng bagay, at sa paglipas ng panahon, lumilipat ang konteksto ng bagay mula sa isang estado patungo sa isa pa.

  5. Bagama't ang Diskarte at Estado ay sumusunod sa bukas/sarado na prinsipyo, ang Diskarte ay sumusunod din sa Single Responsibility Principle dahil ang bawat Diskarte ay naglalaman ng isang indibidwal na algorithm, ang iba't ibang mga diskarte ay independyente sa isa't isa. Ang pagbabago ng isang diskarte ay hindi nangangailangan ng pagbabago ng isa pang diskarte.

  6. Ang isa pang teoretikal na pagkakaiba sa pagitan ng mga pattern ng Strategy at State ay ang pagtukoy ng tagalikha ng "Paano" na bahagi ng bagay, hal. ng bagay, hal. kung ano ang maaaring gawin ng isang bagay kapag ito ay nasa isang tiyak na estado.

  7. Ang pagkakasunud-sunod ng mga paglipat ng estado ay mahusay na tinukoy sa pattern ng Estado; walang ganoong kinakailangan para sa pattern ng Strategy. Ang Kliyente ay malayang pumili ng anumang pagpapatupad ng Diskarte na kanyang pinili.

  8. Ang ilan sa mga karaniwang halimbawa ng pattern ng Strategy ay ang encapsulation ng mga algorithm, gaya ng pag-uuri ng mga algorithm, mga algorithm ng pag-encrypt, o isang compression algorithm. Kung nakikita mo na ang iyong code ay dapat gumamit ng iba't ibang uri ng mga nauugnay na algorithm, dapat mong isaalang-alang ang paggamit ng Strategy pattern. Sa kabilang banda, ang pagkilala sa paggamit ng pattern ng Estado ay medyo madali, kung kailangan mong kontrolin ang estado at mga paglipat sa pagitan ng mga estado nang walang maraming nested conditional na pahayag, ang pattern ng Estado ay ang tamang pattern na gagamitin.

  9. Ang huli ngunit isa sa pinakamahalagang pagkakaiba sa pagitan ng mga pattern ng Estado at Diskarte ay ang pagbabago sa Diskarte ay ginagawa ng Kliyente, habang ang pagbabago sa Estado ay maaaring gawin ng konteksto o ng estado mismo ng bagay.

Ito ay tungkol sa pagkakaiba sa pagitan ng mga pattern ng Estado at Strategy sa Java . Tulad ng sinabi ko, pareho ang hitsura sa kanilang mga klase at UML diagram, parehong nagbibigay ng bukas/sarado na mga prinsipyo at pag-uugali ng encapsulate. Gamitin ang pattern ng Strategy upang i-encapsulate ang isang algorithm o diskarte na nakalantad sa konteksto sa runtime, marahil bilang isang parameter o composite object, at gamitin ang pattern ng Estado upang kontrolin ang mga transition ng estado sa Java. Original dito
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION