JavaRush /Java Blogu /Random-AZ /Java-da Dövlət və Strategiya nümunələri arasındakı fərq
0xFF
Səviyyə
Донецк

Java-da Dövlət və Strategiya nümunələri arasındakı fərq

Qrupda dərc edilmişdir
Əsas Java proqramlarında DövlətStrategiya nümunələrindən düzgün istifadə etmək üçün Java proqramçılarının onların arasındakı fərqi aydın şəkildə anlamaları vacibdir. Hər iki nümunə, Dövlət və Strategiya oxşar struktura malik olsa da və hər ikisi SOLID prinsiplərində “O”-nu təmsil edən açıq/qapalı prinsipə əsaslansa da , niyyət baxımından tamamilə fərqlidir . Java-dakı StrategiyaJava-da Dövlət və Strategiya nümunələri arasındakı fərq - 1 nümunəsi müştəriyə icra çevikliyini təmin etmək üçün əlaqəli alqoritm dəstlərini əhatə etmək üçün istifadə olunur . Müştəri istifadə edən sinfin kontekstini dəyişmədən iş vaxtında istənilən alqoritmi seçə bilər . Strategiya nümunəsinin bəzi məşhur nümunələri şifrələmə, sıxılma və ya çeşidləmə kimi alqoritmlərdən istifadə edən kod yazmaqdır. Digər tərəfdən, Dövlət nümunəsi obyektin müxtəlif dövlətlərdə fərqli davranmasına imkan verir. Çünki real dünyada obyektin tez-tez dövlətləri olur və o, müxtəlif ştatlarda fərqli davranır, məsələn, avtomat yalnız dövlətdədirsə, mal satır , siz ona sikkə qoyana qədər satmır. İndi siz Strategiya və Dövlət nümunələri arasındakı fərqi aydın görə bilərsiniz, bunlar fərqli niyyətlərdir. Dövlət nümunəsi obyektə vəziyyəti idarə etməyə kömək edir, Strategiya modeli isə müştəriyə fərqli davranış seçməyə imkan verir. Görmək o qədər də asan olmayan başqa bir fərq, davranış dəyişikliyini kimin idarə etməsidir. Strategiya nümunəsi vəziyyətində, bu, kontekst üçün müxtəlif strategiyalar təqdim edən müştəridir; Dövlət modelində keçid kontekst və ya obyektin özünün vəziyyəti ilə idarə olunur. Bundan əlavə, əgər siz Dövlət obyektində vəziyyət dəyişikliklərini özünüz idarə edirsinizsə, kontekstə istinad olmalıdır, məsələn, satış maşını kontekstin cari vəziyyətini dəyişdirmək üçün metodu çağıra bilməlidir . Digər tərəfdən, Strategiya obyektində heç vaxt kontekstə istinad yoxdur; müştəri özü seçdiyi Strategiyanı kontekstə ötürür. Dövlət və Strategiya nümunələri arasındakı fərq Java nümunələri ilə bağlı məşhur müsahibə suallarından biridir , Java nümunələri ilə bağlı bu məqalədə biz buna daha yaxından nəzər salacağıq. Java-da Strategiya və Dövlət nümunələri arasında bəzi oxşarlıqları və fərqləri araşdıracağıq ki, bu nümunələr haqqında anlayışınızı yaxşılaşdırmağa kömək edəcək. StrategyhasCoinsetState()

Dövlət və Strategiya nümunələri arasındakı oxşarlıqlar

Dövlət və Strategiya nümunələrinin UML diaqramına baxsanız, hər ikisinin bir-birinə bənzədiyini görəcəksiniz. Davranışını dəyişdirmək üçün Dövlətdən istifadə edən obyekt Context-object kimi tanınır, eynilə davranışını dəyişdirmək üçün Strategiyadan istifadə edən obyekt Context-object kimi tanınır. Müştərinin Context-obyekt ilə qarşılıqlı əlaqədə olduğunu unutmayın. Dövlət nümunəsi vəziyyətində, kontekst nümayəndələri cari obyekt kimi saxlanılan Dövlət obyektinə metodları çağırır və Strategiya nümunəsi vəziyyətində, kontekst Strategiya obyektindən parametr kimi istifadə edir və ya yaradılması zamanı təmin edilir. obyektin konteksti. Java-da Dövlət nümunəsinin UML diaqramı Java-da Dövlət və Strategiya nümunələri arasındakı fərq - 2 Dövlət nümunəsi üçün bu UML diaqramı Java-da obyekt yönümlü satış maşını dizaynının yaradılması ilə bağlı klassik problemi təsvir edir. Avtomatın vəziyyətinin interfeysdən istifadə edərək təqdim olunduğunu görə bilərsiniz, daha sonra xüsusi vəziyyəti təmsil etmək üçün tətbiqetmə var. Hər bir dövlət kontekstdə çağırılan hərəkətlər nəticəsində başqa vəziyyətə keçid etmək üçün obyekt kontekstinə istinadlara da malikdir. Java-da Strategiya nümunəsinin UML diaqramı Java-da Dövlət və Strategiya nümunələri arasındakı fərq - 3 Strategiya nümunəsi üçün bu UML diaqramı növlərin funksional tətbiqlərini ehtiva edir. Çeşidləmə alqoritmləri çox olduğundan, bu dizayn nümunəsi müştəriyə obyektləri çeşidləyərkən alqoritm seçməyə imkan verir. Əslində, Java Collection çərçivəsiCollections.sort() Java-da obyektləri çeşidləmək üçün istifadə olunan metodu həyata keçirmək üçün bu nümunədən istifadə edir . Yeganə fərq ondadır ki, müştəriyə çeşidləmə alqoritmi seçməyə imkan vermək əvəzinə, o, ona Comparator və ya Comparable interfeysinin nümunəsini Java-ya ötürməklə müqayisə strategiyasını müəyyən etməyə imkan verir . Java-da bu iki əsas dizayn nümunəsi arasında bir neçə oxşarlığa baxaq:
  1. Hər iki nümunə, Dövlət və Strategiya, onlardan istifadə edən obyektin kontekstinə təsir etmədən yeni vəziyyət və strategiya əlavə etməyi asanlaşdırır.

  2. Bunların hər ikisi kodunuzu açıq/qapalı prinsipə uyğun saxlayır , yəni dizayn genişlənmələrə açıq, lakin dəyişdirilə bilməz. Dövlət və Strategiya nümunələri vəziyyətində, obyektin konteksti dəyişikliklərə, yeni Dövlətlərin və ya yeni Strategiyaların tətbiqinə bağlıdır və ya digər dövlətin kontekstini və ya minimal dəyişiklikləri dəyişdirməyə ehtiyac yoxdur.

  3. Necə ki, obyekt konteksti Dövlət nümunəsində obyektin başlanğıc vəziyyətindən başlayır, Java-da Strategiya nümunəsi vəziyyətində obyekt kontekstinin də standart strategiyası var.

  4. Dövlət nümunəsi müxtəlif obyekt vəziyyətləri şəklində müxtəlif davranışları, Strategiya nümunəsi isə fərqli obyekt strategiyaları şəklində fərqli davranışları təmsil edir.

  5. Hər iki nümunə, Strategiya və Dövlət, davranışın həyata keçirilməsinin alt siniflərindən asılıdır. Hər bir konkret strategiya Mücərrəd Strategiyanı genişləndirir; hər bir dövlət Dövləti təmsil etmək üçün istifadə olunan interfeys və ya mücərrəd sinfin alt sinfidir.

Java-da Strategiya və Dövlət nümunələri arasındakı fərqlər

Beləliklə, indi biz bilirik ki, Dövlət və Strategiya nümunələri struktur baxımından oxşardır, lakin onların niyyəti fərqlidir. Bu dizayn nümunələri arasındakı bəzi əsas fərqlərə baxaq.
  1. Strategiya nümunəsi əlaqəli alqoritmlər toplusunu əhatə edir və müştəriyə işləmə müddətində kompozisiyaya və nümayəndəliyə baxmayaraq bir-birini əvəz edə bilən davranışlardan istifadə etməyə imkan verir, digər tərəfdən, Dövlət nümunəsi sinfə müxtəlif dövlətlərdə fərqli davranışlar nümayiş etdirməyə kömək edir.

  2. Dövlət və Strategiya nümunələri arasındakı növbəti fərq ondan ibarətdir ki, Dövlət obyektin vəziyyətini əhatə edir , Strategiya nümunəsi isə alqoritmi və ya strategiyanı əhatə edir. Vəziyyət obyektlə əlaqəli olduğundan onu təkrar istifadə etmək olmaz, lakin strategiya və ya alqoritmi kontekstindən ayırmaqla biz onu təkrar istifadə edə bilərik.

  3. Dövlət nümunəsində şəxsi dövlət dövlətlər arasında keçidləri həyata keçirmək üçün kontekstə istinadı ehtiva edə bilər, lakin Strategiyada onun istifadə olunduğu kontekstə istinad yoxdur.

  4. Strategiyanın həyata keçirilməsi ondan istifadə edəcək obyektə parametr kimi ötürülə bilər, məsələn Collection.sort() strategiya olan Müqayisəçini qəbul edir. Digər tərəfdən, vəziyyət obyektin kontekstinin bir hissəsidir və zaman keçdikcə obyektin konteksti bir vəziyyətdən digərinə keçir.

  5. Hər iki Strategiya və Dövlət açıq/qapalı prinsipinə əməl etsə də, Strategiya da Vahid Məsuliyyət Prinsipinə əməl edir, çünki hər bir Strategiya fərdi alqoritmi ehtiva edir, müxtəlif strategiyalar bir-birindən müstəqildir. Bir strategiyanın dəyişdirilməsi digər strategiyanın dəyişdirilməsini tələb etmir.

  6. Strategiya və Dövlət nümunələri arasındakı digər nəzəri fərq ondan ibarətdir ki, yaradıcı obyektin “Necə” hissəsini müəyyən edir, məsələn, çeşidləmə obyekti məlumatları “necə” çeşidləyir, digər tərəfdən, Dövlət nümunəsi “nə” və “nə vaxt”ı müəyyən edir. obyektin hissələri, məsələn, obyekt müəyyən bir vəziyyətdə olduqda nə edə bilər.

  7. Dövlət keçidlərinin ardıcıllığı Dövlət nümunəsində yaxşı müəyyən edilmişdir, Strategiya nümunəsi üçün belə bir tələb yoxdur. Müştəri istədiyi Strategiyanın istənilən icrasını seçməkdə azaddır.

  8. Strategiya nümunəsinin ümumi nümunələrindən bəziləri çeşidləmə alqoritmləri, şifrələmə alqoritmləri və ya sıxılma alqoritmi kimi alqoritmlərin inkapsulyasiyasıdır. Kodunuzun müxtəlif növ əlaqəli alqoritmlərdən istifadə etməli olduğunu görsəniz, Strategiya nümunəsindən istifadə etməyi düşünməlisiniz. Digər tərəfdən, Dövlət nümunəsinin istifadəsini tanımaq olduqca asandır, əgər çoxlu iç-içə şərti ifadələr olmadan vəziyyət və vəziyyət keçidlərini idarə etmək lazımdırsa, Dövlət nümunəsi istifadə etmək üçün düzgün nümunədir.

  9. Dövlət və Strategiya nümunələri arasında sonuncu, lakin ən mühüm fərqlərdən biri odur ki, Strategiyaya dəyişiklik Müştəri tərəfindən həyata keçirilir, halbuki vəziyyətə dəyişiklik kontekst və ya obyektin vəziyyəti tərəfindən həyata keçirilə bilər.

Bütün bunlar Java-da Dövlət və Strategiya nümunələri arasındakı fərqə aiddir . Dediyim kimi, hər ikisi öz siniflərində və UML diaqramlarında oxşar görünür, hər ikisi açıq/qapalı prinsipləri təmin edir və davranışı əhatə edir. İcra zamanı kontekstdə, ola bilsin ki, parametr və ya kompozit obyekt kimi məruz qalan alqoritmi və ya strategiyanı əhatə etmək üçün Strategiya nümunəsindən istifadə edin və Java-da vəziyyət keçidlərini idarə etmək üçün Dövlət nümunəsindən istifadə edin. Orijinal burada
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION