Maksud dari Bridge dan Adaptor berbeda dan kita membutuhkan kedua pola secara terpisah.
Pola jembatan:
- Ini adalah pola struktural
- Abstraksi dan implementasi tidak terikat pada waktu kompilasi
- Abstraksi dan implementasi - keduanya dapat bervariasi tanpa dampak pada klien
- Menggunakan komposisi melebihi pewarisan.
Gunakan pola Jembatan saat:
- Anda ingin mengikat waktu pelaksanaan,
- Anda memiliki proliferasi kelas yang dihasilkan dari antarmuka yang digabungkan dan banyak implementasi,
- Anda ingin berbagi implementasi di antara banyak objek,
- Anda perlu memetakan hierarki kelas ortogonal.
@ John Sonmez menjawab dengan jelas menunjukkan efektivitas pola jembatan dalam mengurangi hirarki kelas.
Anda dapat merujuk ke tautan dokumentasi di bawah ini untuk mendapatkan wawasan yang lebih baik tentang pola jembatan dengan contoh kode
Pola adaptor :
- Ini memungkinkan dua antarmuka yang tidak berhubungan untuk bekerja bersama melalui objek yang berbeda, mungkin memainkan peran yang sama.
- Ini memodifikasi antarmuka asli.
Perbedaan utama:
- Adaptor membuat hal-hal berfungsi setelah dirancang; Jembatan membuat mereka bekerja sebelum mereka.
- Bridge dirancang di muka untuk membiarkan abstraksi dan implementasinya bervariasi secara independen . Adaptor dipasang untuk membuat kelas yang tidak terkait bekerja bersama.
- Maksudnya: Adaptor memungkinkan dua antarmuka yang tidak terkait untuk bekerja bersama. Bridge memungkinkan Abstraksi dan implementasi bervariasi secara independen.
Pertanyaan SE terkait dengan diagram UML dan kode kerja:
Perbedaan antara pola Bridge dan pola Adaptor
Artikel yang berguna:
artikel tentang pola pembuatan jembatan
pembuatan sumber pola artikel adaptor
artikel pola jembatan journaldev
EDIT:
Bridge Pattern contoh dunia nyata (Sesuai saran meta.stackoverflow.com, masukkan contoh situs dokumentasi dalam posting ini karena dokumentasi akan terbenam di matahari)
Pola jembatan memisahkan abstraksi dari implementasi sehingga keduanya dapat bervariasi secara independen. Itu telah dicapai dengan komposisi daripada warisan.
Jembatan pola UML dari Wikipedia:
Anda memiliki empat komponen dalam pola ini.
Abstraction
: Ini mendefinisikan sebuah antarmuka
RefinedAbstraction
: Ini mengimplementasikan abstraksi:
Implementor
: Ini mendefinisikan antarmuka untuk implementasi
ConcreteImplementor
: Ini mengimplementasikan antarmuka Implementor.
The crux of Bridge pattern :
Dua hierarki kelas ortogonal menggunakan komposisi (dan tidak ada warisan). Hirarki Abstraksi dan Implementasi hierarki dapat bervariasi secara independen. Implementasi tidak pernah merujuk Abstraksi. Abstraksi berisi antarmuka Implementasi sebagai anggota (melalui komposisi). Komposisi ini mengurangi satu tingkat hierarki warisan.
Kasus penggunaan kata asli:
Aktifkan kendaraan yang berbeda untuk memiliki kedua versi sistem manual dan auto gear.
Kode contoh:
/* Implementor interface*/
interface Gear{
void handleGear();
}
/* Concrete Implementor - 1 */
class ManualGear implements Gear{
public void handleGear(){
System.out.println("Manual gear");
}
}
/* Concrete Implementor - 2 */
class AutoGear implements Gear{
public void handleGear(){
System.out.println("Auto gear");
}
}
/* Abstraction (abstract class) */
abstract class Vehicle {
Gear gear;
public Vehicle(Gear gear){
this.gear = gear;
}
abstract void addGear();
}
/* RefinedAbstraction - 1*/
class Car extends Vehicle{
public Car(Gear gear){
super(gear);
// initialize various other Car components to make the car
}
public void addGear(){
System.out.print("Car handles ");
gear.handleGear();
}
}
/* RefinedAbstraction - 2 */
class Truck extends Vehicle{
public Truck(Gear gear){
super(gear);
// initialize various other Truck components to make the car
}
public void addGear(){
System.out.print("Truck handles " );
gear.handleGear();
}
}
/* Client program */
public class BridgeDemo {
public static void main(String args[]){
Gear gear = new ManualGear();
Vehicle vehicle = new Car(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Car(gear);
vehicle.addGear();
gear = new ManualGear();
vehicle = new Truck(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Truck(gear);
vehicle.addGear();
}
}
keluaran:
Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear
Penjelasan:
Vehicle
adalah abstraksi.
Car
dan Truck
dua implementasi konkret dari Vehicle
.
Vehicle
mendefinisikan metode abstrak: addGear()
.
Gear
adalah antarmuka implementor
ManualGear
dan AutoGear
dua implementasi dari Gear
Vehicle
mengandung implementor
antarmuka daripada mengimplementasikan antarmuka. Compositon
antarmuka implementor adalah inti dari pola ini: Memungkinkan abstraksi dan implementasi bervariasi secara independen.
Car
dan Truck
mendefinisikan implementasi (abstraksi ulang) untuk abstraksi addGear()
:: Ini berisi Gear
- Entah Manual
atauAuto
Gunakan case untuk pola Bridge :
- Abstraksi dan Implementasi dapat berubah independen satu sama lain dan mereka tidak terikat pada waktu kompilasi
- Peta hierarki ortogonal - Satu untuk Abstraksi dan satu untuk Implementasi .