Apa perbedaan antara pola desain Strategi dan pola desain Negara?

219

Apa perbedaan antara pola desain Strategi dan pola desain Negara? Saya telah melalui beberapa artikel di web tetapi tidak dapat melihat perbedaannya dengan jelas.

Adakah yang bisa menjelaskan perbedaan istilah orang awam?

Chin Tser
sumber
Berdasarkan jawaban di sini dan pengamatan saya sendiri, tampaknya implementasinya sebagian besar (meskipun tidak sepenuhnya) sama. Sebaliknya, perbedaannya terutama salah satu dari niat: kita mencoba untuk menyesuaikan perilaku, baik berdasarkan negara kita (pola negara), atau berdasarkan sesuatu yang lain (pola strategi). Cukup sering bahwa sesuatu yang lain adalah "apa yang klien pilih", melalui suntikan.
Timo

Jawaban:

139

Sejujurnya, kedua pola ini sangat mirip dalam praktiknya, dan perbedaan yang menentukan di antara keduanya cenderung bervariasi tergantung pada siapa yang Anda tanya. Beberapa pilihan populer adalah:

  • Negara menyimpan referensi ke objek konteks yang mengandungnya. Strategi tidak.
  • Negara diizinkan untuk mengganti diri mereka sendiri (IE: untuk mengubah keadaan objek konteks menjadi sesuatu yang lain), sedangkan Strategi tidak.
  • Strategi diteruskan ke objek konteks sebagai parameter, sementara Negara dibuat oleh objek konteks itu sendiri.
  • Strategi hanya menangani satu tugas khusus, sementara Negara menyediakan implementasi yang mendasari untuk segala sesuatu (atau sebagian besar segalanya) yang dilakukan oleh objek konteks.

Implementasi "klasik" akan cocok dengan Negara atau Strategi untuk setiap item dalam daftar, tetapi Anda menjalankan lintas hibrida yang memiliki campuran keduanya. Apakah yang satu itu lebih State-y atau Strategy-y pada akhirnya adalah pertanyaan subyektif.


sumber
6
Jika Anda menghitung GoF sebagai salah satu pilihan populer, mereka akan tidak setuju bahwa Negara harus dibuat oleh konteks (dapat dibuat oleh klien dan diteruskan ke dalam konteks, seperti halnya dengan Strategi).
Will Hardwick-Smith
109
  • The Strategi Pola benar-benar tentang memiliki implementasi yang berbeda yang menyelesaikan (pada dasarnya) hal yang sama, sehingga satu implementasi dapat menggantikan yang lain sebagai strategi membutuhkan. Misalnya, Anda mungkin memiliki algoritma pengurutan yang berbeda dalam pola strategi. Penelepon ke objek tidak berubah berdasarkan strategi yang digunakan, tetapi terlepas dari strategi tujuannya sama (urutkan koleksi).
  • The Negara Pola adalah tentang melakukan hal yang berbeda berdasarkan negara, sementara meninggalkan pemanggil lega dari beban menampung setiap negara mungkin. Jadi misalnya Anda mungkin memiliki getStatus()metode yang akan mengembalikan status berbeda berdasarkan keadaan objek, tetapi pemanggil metode tidak harus dikodekan secara berbeda untuk memperhitungkan setiap keadaan potensial.
Yishai
sumber
1
tetapi siapa yang mengubah strategi dalam pola strategi ??
Noor
1
@Noor, biasanya itu adalah parameter atau bidang sejenis. Kode pemanggil yang sebenarnya tidak diubah berdasarkan perubahan dalam strategi.
Yishai
4
@Noor, ya, tetapi dalam pola strategi apa pun yang dapat saya pikirkan saat ini, itu akan menjadi keputusan di muka yang tidak akan berubah di tengah.
Yishai
2
Saya dengan masalah yang sama, Negara atau Strategi, saya pikir perbedaan dalam beberapa kata adalah, negara, perilaku ditentukan secara otomatis, strategi, perilaku ditentukan oleh penelepon.
Rene MF
1
Dalam aplikasi eCommerce, jika diskon tambahan perlu diterapkan pada musim perayaan, maka itu adalah pola desain negara. Logika tingkat diskonto aktual dapat diterapkan dengan pola desain strategi, jika ada lebih dari satu cara untuk mencapai angka itu.
Bharathkumar V
85

Perbedaannya terletak pada mereka memecahkan masalah yang berbeda:

  • The Negara penawaran pola dengan apa (negara atau jenis) suatu objek (dalam) - itu merangkum perilaku negara-tergantung, sedangkan
  • yang Strategi penawaran pola dengan cara objek melakukan tugas tertentu - itu merangkum algoritma.

Namun, konstruksi untuk mencapai tujuan yang berbeda ini sangat mirip; kedua pola adalah contoh komposisi dengan delegasi.


Beberapa pengamatan tentang kelebihan mereka:

Dengan menggunakan pola Negara, kelas holding-state (konteks) dibebaskan dari pengetahuan tentang apa negara atau jenis itu dan apa negara atau jenis yang tersedia. Ini berarti bahwa kelas mematuhi prinsip desain terbuka-terbuka (OCP): kelas ditutup untuk perubahan dalam status / tipe apa yang ada, tetapi status / tipe tersebut terbuka untuk ekstensi.

Dengan menggunakan pola Strategi kelas yang menggunakan algoritma (konteks) dibebaskan dari pengetahuan tentang bagaimana melakukan tugas tertentu (- "algoritma"). Kasus ini juga menciptakan kepatuhan terhadap OCP; kelas ditutup untuk perubahan tentang cara melakukan tugas ini, tetapi desainnya sangat terbuka untuk penambahan algoritma lain untuk menyelesaikan tugas ini.
Ini kemungkinan juga meningkatkan kepatuhan kelas konteks terhadap prinsip tanggung jawab tunggal (SRP). Lebih lanjut, algoritma menjadi mudah tersedia untuk digunakan kembali oleh kelas lain.

Ulf Åkerstedt
sumber
42

Adakah yang bisa dijelaskan dengan istilah awam?

Pola desain sebenarnya bukan konsep "awam", tetapi saya akan mencoba membuatnya sejelas mungkin. Pola desain apa pun dapat dipertimbangkan dalam tiga dimensi:

  1. Masalahnya pola terpecahkan;
  2. Struktur statis dari pola (diagram kelas);
  3. Dinamika pola (diagram urutan).

Mari kita bandingkan Negara dan Strategi.

Masalah polanya terpecahkan

Status digunakan dalam satu dari dua kasus [buku GoF hal. 306] :

  • Perilaku suatu objek tergantung pada kondisinya, dan ia harus mengubah perilakunya pada saat run-time tergantung pada keadaan itu.
  • Operasi memiliki pernyataan bersyarat banyak-bagian yang bergantung pada keadaan objek. Keadaan ini biasanya diwakili oleh satu atau lebih konstanta yang disebutkan. Seringkali, beberapa operasi akan mengandung struktur bersyarat yang sama ini. Pola Negara menempatkan masing-masing cabang kondisional dalam kelas yang terpisah. Ini memungkinkan Anda memperlakukan status objek sebagai objek dengan caranya sendiri yang dapat berbeda secara independen dari objek lain.

Jika Anda ingin memastikan bahwa Anda memang memiliki masalah yang dipecahkan pola Negara, Anda harus dapat memodelkan keadaan objek menggunakan mesin keadaan terbatas . Anda dapat menemukan contoh terapan di sini .

Setiap transisi negara adalah metode di antarmuka Negara. Ini menyiratkan bahwa untuk suatu desain, Anda harus cukup yakin tentang transisi keadaan sebelum Anda menerapkan pola ini. Jika tidak, jika Anda menambah atau menghapus transisi, itu akan memerlukan perubahan antarmuka dan semua kelas yang mengimplementasikannya.

Saya pribadi belum menemukan pola ini yang bermanfaat. Anda selalu dapat menerapkan mesin negara hingga menggunakan tabel pencarian (ini bukan cara OO, tetapi bekerja cukup baik).

Strategi digunakan untuk [buku GoF hal. 316] :

  • banyak kelas terkait hanya berbeda dalam perilaku mereka. Strategi menyediakan cara untuk mengkonfigurasi kelas dengan salah satu dari banyak perilaku.
  • Anda perlu varian algoritma yang berbeda. Misalnya, Anda dapat mendefinisikan algoritma yang mencerminkan pertukaran ruang / waktu yang berbeda. Strategi dapat digunakan ketika varian ini diimplementasikan sebagai hierarki kelas algoritma [HO87].
  • suatu algoritma menggunakan data yang seharusnya tidak diketahui klien. Gunakan pola Strategi untuk menghindari mengekspos struktur data yang kompleks dan spesifik algoritma.
  • kelas mendefinisikan banyak perilaku, dan ini muncul sebagai beberapa pernyataan kondisional dalam operasinya. Alih-alih banyak kondisional, pindahkan cabang kondisional terkait ke kelas Strategi mereka sendiri.

Kasus terakhir dari mana menerapkan Strategi terkait dengan refactoring yang dikenal sebagai Ganti kondisional dengan polimorfisme .

Ringkasan: Negara dan Strategi memecahkan masalah yang sangat berbeda. Jika masalah Anda tidak dapat dimodelkan dengan mesin status terbatas, maka kemungkinan pola State tidak sesuai. Jika masalah Anda bukan tentang merangkum varian dari algoritma yang kompleks, maka Strategi tidak berlaku.

Struktur pola yang statis

Negara memiliki struktur kelas UML berikut:

Diagram kelas PlantUML dari Pola Negara

Strategi memiliki struktur kelas UML berikut:

Diagram kelas PlantUML dari Pola Strategi

Ringkasan: dalam hal struktur statis, kedua pola ini sebagian besar identik. Bahkan, alat pendeteksi pola seperti ini menganggap bahwa " struktur pola [...] identik, melarang pembedaannya dengan proses otomatis (misalnya, tanpa merujuk pada informasi konseptual). "

Akan ada perbedaan besar, jika ConcreteStates memutuskan sendiri transisi status (lihat asosiasi " mungkin menentukan " pada diagram di atas). Ini menghasilkan sambungan antara kondisi konkret. Sebagai contoh (lihat bagian berikutnya), negara A menentukan transisi ke negara B. Jika kelas konteks memutuskan transisi ke keadaan konkret berikutnya, dependensi ini hilang.

Dinamika pola

Seperti yang disebutkan di bagian Masalah di atas, Negara menyiratkan bahwa perilaku berubah pada saat run-time tergantung pada beberapa keadaan objek. Oleh karena itu, gagasan transisi negara berlaku, seperti yang dibahas dengan hubungan mesin negara terbatas . [GoF] menyebutkan bahwa transisi dapat didefinisikan dalam subkelas ConcreteState, atau di lokasi terpusat (seperti lokasi berbasis tabel).

Mari kita asumsikan mesin negara terbatas sederhana:

Diagram transisi status PlantUML dengan dua status dan satu transisi

Dengan asumsi subclass menentukan transisi keadaan (dengan mengembalikan objek keadaan berikutnya), dinamika terlihat seperti ini:

Diagram urutan PlantUML untuk transisi keadaan

Untuk menunjukkan dinamika Strategi , ada baiknya meminjam contoh nyata .

Diagram urutan PlantUML untuk transisi strategi

Ringkasan : Setiap pola menggunakan panggilan polimorfik untuk melakukan sesuatu tergantung pada konteksnya. Dalam pola Negara, panggilan polimorfik (transisi) sering menyebabkan perubahan di negara berikutnya . Dalam pola Strategi, panggilan polimorfik biasanya tidak mengubah konteks (misalnya, membayar dengan kartu kredit sekali tidak berarti Anda akan membayar melalui PayPal di waktu berikutnya). Sekali lagi, dinamika pola negara ditentukan oleh mesin negara fininte yang sesuai , yang (bagi saya) sangat penting untuk memperbaiki penerapan pola ini.

Fuhrmanator
sumber
Jawaban ini sangat membantu saya untuk membuat saya membedakan perbedaannya. Argumen mesin negara terdengar sebagai IMHO terkait. Ini sebenarnya meringkas jawaban di atas dengan cara ilmu komputer teoritis.
medunes
Jawaban ini sangat membantu, bagi saya ini yang terbaik.
Chofoteddy
25

Pola Strategi melibatkan memindahkan implementasi algoritma dari kelas hosting dan meletakkannya di kelas yang terpisah. Ini berarti bahwa kelas host tidak perlu menyediakan implementasi dari setiap algoritma itu sendiri, yang cenderung mengarah pada kode yang tidak bersih.

Algoritma pengurutan biasanya digunakan sebagai contoh karena mereka semua melakukan hal yang sama (sort). Jika setiap algoritma pengurutan yang berbeda dimasukkan ke dalam kelasnya sendiri, maka klien dapat dengan mudah memilih algoritma mana yang akan digunakan dan polanya menyediakan cara mudah untuk mengaksesnya.

Pola Negara melibatkan mengubah perilaku suatu objek ketika keadaan objek berubah. Ini berarti bahwa kelas host tidak menyediakan implementasi perilaku untuk semua keadaan berbeda yang bisa terjadi. Kelas host biasanya merangkum kelas yang menyediakan fungsionalitas yang diperlukan dalam keadaan tertentu, dan beralih ke kelas yang berbeda. ketika negara berubah.

Ryan Spears
sumber
16

Pertimbangkan sistem IVR (Respon Suara Interaktif) yang menangani panggilan pelanggan. Anda mungkin ingin memprogramnya untuk menangani pelanggan di:

  • Hari kerja
  • Liburan

Untuk menangani situasi ini, Anda dapat menggunakan Pola Negara .

  • Liburan : IVR hanya menjawab dengan mengatakan bahwa ' Panggilan hanya dapat dilakukan pada hari kerja antara jam 9 pagi sampai jam 5 sore '.
  • Hari kerja : merespons dengan menghubungkan pelanggan ke eksekutif layanan pelanggan.

Proses menghubungkan pelanggan ke eksekutif dukungan itu sendiri dapat diimplementasikan menggunakan Pola Strategi di mana eksekutif dipilih berdasarkan salah satu dari:

  • Usul
  • Paling Baru Digunakan
  • Algoritma berbasis prioritas lainnya

Pola strategi memutuskan ' bagaimana ' untuk melakukan beberapa tindakan dan pola negara memutuskan ' kapan ' untuk melakukan itu.

Murali Mohan
sumber
Ini adalah jawaban yang sangat bagus dan diremehkan. Namun, akan sangat membantu untuk menyebutkan mengapa ada banyak algoritma yang dibutuhkan dalam contoh Anda. Misalnya, algoritma dipilih berdasarkan preferensi perusahaan Call center. Ini juga akan membantu jika ada algoritma yang lebih sederhana atau sepele dalam daftar Anda untuk mereka yang tidak tahu RR atau LRU. Misalnya - Pelanggan lama mendapat prioritas lebih tinggi, Pelanggan yang menunggu paling banyak mendapat prioritas lebih tinggi. Terima kasih!
MasterJoe2
14

Strategi mewakili objek yang "melakukan" sesuatu, dengan hasil awal dan akhir yang sama, tetapi secara internal menggunakan metodologi yang berbeda. Dalam arti mereka analog dengan mewakili implementasi kata kerja. Pola State OTOH menggunakan objek yang "adalah" sesuatu - keadaan operasi. Meskipun mereka dapat mewakili operasi pada data itu juga, mereka lebih analog dengan representasi kata benda daripada kata kerja, dan dirancang untuk mesin negara.

zzzeek
sumber
11

Strategi: strategi diperbaiki dan biasanya terdiri dari beberapa langkah. (Penyortiran hanya merupakan satu langkah dan karenanya merupakan contoh yang sangat buruk karena terlalu primitif untuk memahami tujuan dari pola ini). Rutin "utama" Anda dalam strategi ini memanggil beberapa metode abstrak. Misal "Enter Room Strategy", "main-method" adalah goThroughDoor (), yang terlihat seperti: approachDoor (), if (terkunci ()) openLock (); openDoor (); enterRoom (); belok(); tutup pintu(); if (wasLocked ()) lockDoor ();

Sekarang subkelas dari "algoritma" umum ini untuk berpindah dari satu ruangan ke ruangan lain melalui pintu yang mungkin terkunci dapat menerapkan langkah-langkah algoritma.

Dengan kata lain, subklasifikasi strategi tidak mengubah algoritma dasar, hanya langkah-langkah individual.

BAHWA DI ATAS adalah Pola Metode Pola. Sekarang masukkan langkah-langkah yang dimiliki bersama (membuka / mengunci dan membuka / menutup) ke objek implementasinya sendiri dan mendelegasikannya kepada mereka. Misalnya kunci dengan kunci dan kunci dengan kartu kode adalah dua jenis kunci. Delegasikan dari strategi ke objek "Langkah". Sekarang Anda memiliki pola Strategi.

Pola Negara adalah sesuatu yang sangat berbeda.

Anda memiliki objek pembungkus dan objek terbungkus. Yang dibungkus adalah "negara". Objek keadaan hanya diakses melalui pembungkusnya. Sekarang Anda dapat mengubah objek yang dibungkus kapan saja, sehingga pembungkusnya tampaknya mengubah statusnya, atau bahkan "kelas" atau jenisnya.

Misalnya Anda memiliki layanan log on. Ia menerima nama pengguna dan kata sandi. Hanya memiliki satu metode: logon (String userName, String passwdHash). Alih-alih memutuskan sendiri apakah log masuk diterima atau tidak, ia mendelegasikan keputusan ke objek negara. Objek keadaan itu biasanya hanya memeriksa apakah kombinasi pengguna / pass valid dan melakukan log on. Tetapi sekarang Anda dapat menukar "Pemeriksa" dengan yang hanya memungkinkan pengguna yang dilindungi hak akses masuk (selama mis. Waktu pemeliharaan) atau dengan yang tidak mengizinkan siapa pun masuk. Itu berarti "pemeriksa" menyatakan "status masuk log" dari sistem.

Perbedaan yang paling penting adalah: ketika Anda memilih strategi, Anda tetap menggunakannya sampai selesai. Itu berarti Anda menyebutnya "metode utama" dan selama itu berjalan Anda tidak pernah mengubah strategi. OTOH dalam situasi pola keadaan selama runtime sistem Anda, Anda mengubah keadaan secara sewenang-wenang sesuai keinginan Anda.

Angel O'Sphere
sumber
9

Pola strategi digunakan ketika Anda memiliki beberapa algoritma untuk tugas tertentu dan klien memutuskan implementasi aktual untuk digunakan saat runtime.

Diagram UML dari artikel pola Strategi wiki :

masukkan deskripsi gambar di sini

Fitur utama:

  1. Ini adalah pola perilaku.
  2. Ini didasarkan pada delegasi.
  3. Ini mengubah isi objek dengan memodifikasi perilaku metode.
  4. Ini digunakan untuk beralih di antara keluarga algoritma.
  5. Itu mengubah perilaku objek pada saat run time.

Lihat posting ini untuk info lebih lanjut & contoh dunia nyata:

Contoh Dunia Nyata dari Pola Strategi

Negara pola memungkinkan sebuah objek untuk mengubah perilakunya ketika perubahan internal negara

Diagram UML dari artikel pola wiki State:

masukkan deskripsi gambar di sini

Jika kita harus mengubah perilaku objek berdasarkan statusnya, kita dapat memiliki variabel status di objek dan menggunakan blok kondisi if-else untuk melakukan tindakan berbeda berdasarkan kondisi. Pola negara digunakan untuk menyediakan cara yang sistematis dan kehilangan-digabungkan untuk mencapai ini melalui implementasi Konteks dan Negara .

Lihat artikel journaldev ini untuk lebih jelasnya.

Perbedaan utama dari pembuatan sumber dan artikel jurnal :

  1. Perbedaan antara Negara dan Strategi terletak pada waktu yang mengikat. Strategi adalah pola ikatan-sekali, sedangkan Negara lebih dinamis .
  2. Perbedaan antara Negara dan Strategi ada pada tujuannya. Dengan Strategi, pilihan algoritma cukup stabil . Dengan Negara, perubahan dalam keadaan objek "konteks" menyebabkannya memilih dari "palet" objek Strategi .
  3. Konteks berisi keadaan sebagai variabel instan dan ada beberapa tugas yang implementasinya dapat bergantung pada keadaan sedangkan dalam strategi pola strategi dilewatkan sebagai argumen ke metode dan objek konteks tidak memiliki variabel untuk menyimpannya.
Ravindra babu
sumber
5

Dalam bahasa awam,

dalam pola Strategi, tidak ada negara atau semuanya memiliki keadaan yang sama. Semua orang memiliki cara yang berbeda dalam melakukan tugas, seperti dokter yang berbeda mengobati penyakit yang sama dari pasien yang sama dengan keadaan yang sama dengan cara yang berbeda.

Dalam Pola keadaan, secara subyektif ada keadaan, seperti keadaan pasien saat ini (katakan suhu tinggi atau suhu rendah), berdasarkan pada tindakan selanjutnya (resep obat) yang akan diputuskan. Dan satu keadaan dapat menyebabkan keadaan lain, sehingga ada keadaan untuk menyatakan ketergantungan (komposisi secara teknis).

Jika kita secara teknis mencoba memahaminya, berdasarkan perbandingan kode keduanya, kita mungkin kehilangan subjektivitas situasi, karena keduanya terlihat sangat mirip.

pkgrocz
sumber
2

Kedua pola mendelegasikan ke kelas dasar yang memiliki beberapa turunan, tetapi hanya dalam pola Negara bahwa kelas-kelas turunan ini menyimpan referensi kembali ke kelas konteks.

Cara lain untuk melihatnya adalah bahwa pola Strategi adalah versi yang lebih sederhana dari pola Negara; sub-pola, jika Anda suka. Ini benar-benar tergantung apakah Anda ingin negara yang diturunkan menyimpan referensi kembali ke konteks atau tidak (yaitu: apakah Anda ingin mereka memanggil metode pada konteks).

Untuk info lebih lanjut: Robert C Martin (& Micah Martin) menjawab ini dalam buku mereka, "Prinsip Agile, Pola dan Praktek di C #". ( http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258 )

Adrian K
sumber
2

Ini adalah pertanyaan yang cukup lama, tapi tetap saja, saya juga mencari jawaban yang sama dan inilah yang saya temukan.

Untuk pola Keadaan mari kita perhatikan contoh tombol Putar Pemain Medial. Ketika kami memainkannya, ia mulai bermain dan membuat konteksnya sadar bahwa itu sedang diputar. Setiap kali klien ingin melakukan operasi permainan, ia memeriksa kondisi pemain saat ini. Sekarang klien tahu keadaan objek diputar melalui objek konteks sehingga ia memanggil metode tindakan objek keadaan jeda. Bagian klien menyadari keadaan dan pada keadaan apa yang perlu dilakukan tindakan dapat diotomatisasi.

https://www.youtube.com/watch?v=e45RMc76884 https://www.tutorialspoint.com/design_pattern/state_pattern.htm

Dalam kasus pola Strategi, pengaturan diagram kelas sama dengan pola keadaan. Klien datang ke pengaturan ini untuk melakukan beberapa operasi. Itu bukan keadaan yang berbeda ada algoritma yang berbeda katakan misalnya analisis yang berbeda yang perlu dilakukan pada pola. Di sini klien memberi tahu konteks apa yang ingin dilakukan algoritma itu (algoritme kustom yang ditentukan bisnis) lalu melakukan itu.

https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm

Keduanya menerapkan prinsip buka tutup sehingga pengembang memiliki kemampuan untuk menambahkan status baru ke pola keadaan dan algoritma baru.

Tetapi perbedaannya adalah apa yang mereka gunakan yaitu pola keadaan yang digunakan untuk mengeksekusi logika yang berbeda berdasarkan keadaan objek. Dan dalam kasus strategi logika berbeda.

Ameya
sumber
2

Negara datang dengan sedikit dependensi dalam kelas yang diturunkan negara: seperti satu negara tahu tentang negara lain yang datang setelah itu. Misalnya, Musim Panas datang setelah musim dingin untuk setiap negara musim, atau negara Pengiriman setelah negara Deposit untuk berbelanja.

Di sisi lain, Strategi tidak memiliki dependensi seperti ini. Di sini, segala jenis negara dapat diinisialisasi berdasarkan jenis program / produk.

MH Rahman
sumber
1

Perbedaannya dibahas dalam http://c2.com/cgi/wiki?StrategyPattern . Saya telah menggunakan pola Strategi untuk memungkinkan algoritma yang berbeda dipilih dalam kerangka kerja keseluruhan untuk menganalisis data. Melalui itu Anda dapat menambahkan algoritma tanpa harus mengubah kerangka kerja keseluruhan dan logikanya.

Contoh khas adalah bahwa Anda memiliki kerangka kerja untuk mengoptimalkan fungsi. Kerangka kerja mengatur data dan parameter. Pola strategi memungkinkan Anda untuk memilih algoritma seperti sttepest descents, conjugate gradients, BFGS, dll. Tanpa mengubah kerangka kerja.

peter.murray.rust
sumber
1

Baik Strategi dan pola Negara memiliki struktur yang sama. Jika Anda melihat diagram kelas UML untuk kedua pola mereka terlihat sama persis, tetapi tujuannya sama sekali berbeda. Pola desain keadaan digunakan untuk mendefinisikan dan mengelola keadaan suatu objek, sedangkan pola Strategi digunakan untuk mendefinisikan satu set algoritma yang dapat dipertukarkan dan memungkinkan klien untuk memilih salah satunya. Jadi pola Strategi adalah pola yang didorong oleh klien, sementara Obyek dapat mengatur keadaan di sana itu sendiri.

Rakesh KR
sumber
1

Singkatnya, dengan pola strategi kita dapat mengatur beberapa perilaku dengan cepat, dengan pola keadaan, kita dapat yakin, bahwa suatu objek akan mengubah perilakunya secara internal dengan perubahan statusnya.

rastaman
sumber
0

Ketika Anda memiliki proyek yang dapat dibagi menjadi 2 tugas:

tugas 1: Anda dapat menggunakan salah satu dari dua algoritma berbeda untuk menyelesaikan: alg1, alg2

tugas 2: Anda dapat menggunakan salah satu dari tiga algoritma berbeda untuk menyelesaikan: alg3, alg4, alg5

alg1 dan alg2 dapat dipertukarkan; alg3, alg4 dan alg5 dapat dipertukarkan.

Memilih algoritma yang akan dilakukan dalam tugas 1 dan tugas 2 tergantung pada status:

negara 1: Anda perlu alg1 di tugas 1 dan alg3 di tugas 2

status 2: Anda membutuhkan alg2 di tugas 1 dan alg5 di tugas 2

Konteks Anda dapat mengubah objek negara dari status 1 ke status 2. Kemudian tugas Anda akan diselesaikan dengan alg2 dan alg5, bukan alg1 dan alg3.

Anda dapat menambahkan lebih banyak algoritma yang dapat dipertukarkan untuk tugas 1 atau tugas 2. Ini adalah pola strategi.

Anda dapat memiliki lebih banyak status dengan kombinasi algoritma yang berbeda dalam tugas 1 dan tugas 2. Pola status memungkinkan Anda untuk beralih dari satu kondisi ke kondisi lain dan melakukan kombinasi algoritma yang berbeda.

pengguna791961
sumber
0

'Strategi' hanyalah sebuah algoritma yang dapat Anda ubah dalam keadaan yang berbeda sesuai kebutuhan, dan ia memproses sesuatu untuk Anda. Ex. Anda dapat memilih cara memampatkan file. zip atau rar ... dalam suatu metode.

Tapi 'Status' BISA mengubah semua perilaku objek Anda, ketika itu berubah, Bahkan itu dapat mengubah bidang lain ... itu sebabnya ia memiliki referensi ke pemiliknya. Anda harus memperhatikan bahwa mengubah bidang objek dapat mengubah perilaku objek sama sekali. Ex. ketika Anda mengubah State0 ke State1 di obj, Anda mengubah bilangan bulat menjadi 10. .. jadi ketika kami memanggil obj.f0 () yang melakukan beberapa perhitungan dan menggunakan bilangan bulat itu, itu mempengaruhi hasilnya.

Ali Dahaghin
sumber