Semantik. Dari wikipedia :
Diagram kelas UML untuk pola Strategi sama dengan diagram untuk pola Bridge. Namun, kedua pola desain ini tidak sama maksudnya. Sementara pola Strategi dimaksudkan untuk perilaku, pola Jembatan dimaksudkan untuk struktur.
Kopling antara konteks dan strategi lebih erat daripada gabungan antara abstraksi dan implementasi dalam pola Bridge.
Seperti yang saya pahami, Anda menggunakan pola strategi saat Anda mengabstraksi perilaku yang dapat disediakan dari sumber eksternal (misalnya config dapat menentukan untuk memuat beberapa rakitan plugin), dan Anda menggunakan pola jembatan saat Anda menggunakan konstruksi yang sama untuk membuat kode Anda sedikit lebih rapi. Kode sebenarnya akan terlihat sangat mirip - Anda hanya menerapkan pola untuk alasan yang sedikit berbeda .
Pola Bridge adalah pola struktural (BAGAIMANA ANDA MEMBANGUN KOMPONEN PERANGKAT LUNAK?). Pola Strategi adalah pola dinamis (BAGAIMANA ANDA INGIN MENJALANKAN PERILAKU DI PERANGKAT LUNAK?).
Sintaksnya serupa tetapi tujuannya berbeda:
sumber
Strategi:
Intent adalah kemampuan untuk menukar perilaku saat runtime
Menjembatani
Maksudnya adalah untuk sepenuhnya memisahkan Abstraksi dari Implementasi
sumber
Saya juga memikirkan hal yang sama, tetapi baru-baru ini saya harus menggunakan bridge dan menyadari bahwa bridge menggunakan strategi dan menambahkan abstraksi ke konteksnya sehingga Anda nantinya dapat membuat lebih banyak perubahan tanpa mengubah klien. Saat menggunakan Strategi tanpa abstraksi, desainnya tidak sefleksibel dan mungkin memerlukan perubahan pada klien nanti. Namun saat menggunakan keseluruhan jembatan, desainnya menjadi lebih fleksibel. Di sini Anda dapat melihat bagaimana beralih dari Strategi ke Jembatan memberi lebih banyak fleksibilitas. Juga kami berasumsi bahwa sekarang "visa" dan "master" tidak hanya tersedia di kartu tetapi juga di telepon dan chip; dan jika kita menggunakan jembatan, jauh lebih mudah untuk menambahkan dukungan itu.
sumber
Bridge : (Pola struktural)
Pola jembatan memisahkan abstraksi dan implementasi dan memungkinkan keduanya bervariasi secara independen.
Gunakan pola ini ketika:
Strategi: (Pola perilaku)
Pola strategi memungkinkan Anda untuk beralih di antara beberapa algoritme dari keluarga algoritme pada saat berjalan.
Gunakan pola Strategi ketika:
Pos terkait:
Kapan Anda menggunakan Pola Jembatan? Apa bedanya dengan pola Adaptor?
Contoh Pola Strategi Dunia Nyata
sumber
Jenis pola desain
Jembatan (Struktural)
Ambil remote. Remote memiliki tombol 1-6. Ini adalah kelas beton pada diagram di atas. Setiap tombol akan bekerja berbeda tergantung pada apakah remote digunakan untuk TV atau DVD. Fungsionalitas untuk setiap tombol disarikan dari implementasi oleh antarmuka pelaksana.
Ini memungkinkan kami mengubah cara kerja remote untuk setiap perangkat.
Strategi (Perilaku)
Secara strategi, jika kita melihat skenario jarak jauh. "Status" adalah seluruh jarak jauh yang kami tukar dengan mengubah referensi status konteks. The "concreteStateA" (remote TV) "concreteStateB" (Remote DVD).
Bacaan tambahan:
sumber
Pola Strategi digunakan untuk keputusan Perilaku, sedangkan Pola Jembatan digunakan untuk keputusan Struktural.
Pola Brigde memisahkan elemen abstrak dari detail implementasi, sedangkan Pola Strategi berkaitan dengan membuat algoritme lebih dapat dipertukarkan.
Pola Strategi di UML
Pola Brigde di UML
Pola Strategi di Swift:
Pola Brigde di Swift:
sumber
Stereo
denganTV
dan kodenya langsung berfungsi.Menambahkan jawaban willcodejavaforfood, mereka bisa sama, dalam implementasi. Bagaimanapun Anda menggunakan strategi untuk menukar strategi seperti strategi pengurutan, sementara Anda menggunakan jembatan untuk menjembatani implementasi dua objek, katakanlah pembungkus database, dan adaptor jaringan sehingga kode klien dapat menggunakan baik yang bekerja pada API yang sama. Jadi penamaan itu menjelaskan semuanya
sumber
Dari wiki tentang pola Strategi
sumber
Hanya untuk menambah apa yang telah dikatakan tentang perbandingan pola (perbedaan maksud, ...): pola Bridge juga sengaja disusun untuk memungkinkan sisi hierarki abstraksi bervariasi. Dalam bahasa seperti C #, hal ini dapat berarti Anda memiliki basis abstraksi yang berisi metode virtual sebagai cara untuk memungkinkan variasi yang diinginkan yang tidak menimbulkan masalah bagi konsumen yang ada. Selain itu, kedua pola tersebut mungkin tampak identik untuk sebagian besar.
sumber
Pola strategi digunakan ketika Anda ingin memasukkan algoritma atau strategi pada saat run time. Sebagai kategori pola juga menyiratkan bahwa itu berkaitan dengan perilaku objek. Di sisi lain jembatan adalah pola struktural dan berhubungan dengan hierarki struktural objek. Ini memisahkan abstraksi dari implementasi dengan memperkenalkan abstraksi halus di antara mereka. Abstraksi yang disempurnakan dapat disalahartikan dengan strategi waktu proses yang dipasang (pola Strategi). Pola jembatan berkaitan dengan aspek struktural dengan menyediakan mekanisme untuk menghindari pembuatan n sejumlah kelas.
sumber
Untuk pola strategi hanya implementasinya yang bervariasi.
Misalkan, kelas A menggunakan kelas B yang memiliki beberapa implementasi yang tersedia. Jadi dalam kasus B akan menjadi abstrak dengan implementasi aktual yang disediakan pada waktu proses. Ini adalah pola strategi
Sekarang jika A itu sendiri abstrak. Baik A dan B mungkin berbeda. Anda akan menggunakan pola Bridge.
sumber
Saya pikir ada sedikit perbedaan di antara keduanya dalam konteks penggunaannya.
Saya menggunakan pola Bridge untuk memisahkan konsep ortogonal yang keduanya termasuk dalam konsep yang lebih besar - untuk membedakannya secara independen. Biasanya melibatkan banyak abstraksi.
IMO, pola Strateginya lebih sederhana atau lebih datar. Ini berfungsi untuk OCP pasti tetapi tidak harus menjadi bagian dari konsep lain dan lebih besar seperti pola Bridge.
sumber