Apa pola Jembatan?
Pola Jembatan adalah pola desain struktural. Artinya, tugas utamanya adalah membuat struktur kelas dan objek yang lengkap. Bridge memecahkan masalah ini dengan memisahkan satu atau lebih kelas ke dalam hierarki terpisah - abstraksi dan implementasi . Perubahan fungsionalitas dalam satu hierarki tidak berarti perubahan pada hierarki lainnya. Segalanya tampak jelas, namun nyatanya definisi ini terdengar sangat luas dan tidak menjawab pertanyaan utama: “Apa yang dimaksud dengan pola Bridge?” Saya pikir ini akan lebih mudah bagi Anda untuk memahaminya dalam praktik. Mari kita segera memodelkan contoh klasik untuk pola Bridge. Kami memiliki kelas abstrakShape
yang secara umum menggambarkan sosok geometris:
-
Bentuk.java
public abstract class Shape { public abstract void draw(); }
Ketika kita memutuskan untuk menambahkan bentuk segitiga dan persegi panjang, kita akan mewarisi dari kelas
Shape
: -
Persegi Panjang.java:
public class Rectangle extends Shape { @Override public void draw() { System.out.println("Drawing rectangle"); } }
-
Segitiga.java:
public class Triangle extends Shape { @Override public void draw() { System.out.println("Drawing triangle"); } }
draw()
. Untuk mendapatkan implementasi metode yang berbeda draw()
, kita perlu membuat kelas untuk setiap bentuk yang sesuai dengan warna. Jika ada tiga warna, maka ada enam kelas: TriangleBlack
, TriangleGreen
, TriangleRed
, RectangleBlack
, RectangleGreen
dan RectangleRed
. Enam kelas bukanlah masalah besar. Tetapi! Jika kita perlu menambahkan bentuk atau warna baru, jumlah kelas akan bertambah secara eksponensial. Bagaimana cara keluar dari situasi ini? Menyimpan warna dalam suatu bidang dan mencoba opsi melalui kondisional bukanlah solusi terbaik. Solusi yang baik adalah dengan menampilkan warna dalam antarmuka terpisah . Segera selesai: mari buat antarmuka Color
dan tiga implementasinya - BlackColor
, GreenColor
dan RedColor
:
-
Warna.java:
public interface Color { void fillColor(); }
-
Warna Hitam.java:
public class BlackColor implements Color { @Override public void fillColor() { System.out.println("Filling in black color"); } }
-
Warna Hijau.java
public class GreenColor implements Color { @Override public void fillColor() { System.out.println("Filling in green color"); } }
-
Warna Merah.java
public class RedColor implements Color { @Override public void fillColor() { System.out.println("Filling in red color"); } }
Sekarang mari tambahkan bidang tipe
Color
ke kelasShape
- kita akan menerima nilainya di konstruktor. -
Bentuk.java:
public abstract class Shape { protected Color color; public Shape(Color color) { this.color = color; } public abstract void draw(); }
color
Kami akan menggunakan variabel dalam implementasiShape
. Ini berarti bahwa bentuk sekarang dapat menggunakan fungsionalitas antarmukaColor
. -
Rectangle.java
public class Rectangle extends Shape { public Rectangle(Color color) { super(color); } @Override public void draw() { System.out.println("Drawing rectangle"); color.fillColor(); } }
Color color
merupakan jembatan yang menghubungkan dua hierarki kelas yang terpisah.
Perangkat jembatan: apa itu abstraksi dan implementasi
Mari kita lihat diagram kelas yang menggambarkan pola Bridge: Di sini Anda dapat melihat dua struktur independen yang dapat dimodifikasi tanpa mempengaruhi fungsionalitas satu sama lain. Dalam kasus kami, ini adalah:- Abstraksi - kelas
Shape
; - Abstraksi Halus - kelas
Triangle
,Rectangle
; - Pelaksana - antarmuka
Color
; - ConcreteImplementor - kelas
BlackColor
,GreenColor
danRedColor
.
Shape
mewakili Abstraksi - mekanisme untuk mengontrol pewarnaan bentuk dalam warna berbeda, yang mendelegasikan Implementasi ke antarmuka Color
. Kelas Triangle
adalah Rectangle
objek nyata yang menggunakan mekanisme yang ditawarkan oleh kelas tersebut Shape
. BlackColor
, GreenColor
dan RedColor
- implementasi spesifik di cabang Implementasi. Mereka sering disebut platform.
Dimana pola Bridge digunakan?
Keuntungan besar menggunakan pola ini adalah Anda dapat membuat perubahan pada fungsionalitas kelas di satu cabang tanpa merusak logika cabang lainnya. Pendekatan ini juga membantu mengurangi penggabungan kelas-kelas program. Syarat utama untuk menggunakan pola adalah “ikuti instruksi”: jangan menempelkannya di mana pun! Sebenarnya, mari kita cari tahu dalam kasus apa Anda perlu menggunakan Bridge:-
Jika perlu untuk memperluas jumlah entitas dalam dua arah (bentuk geometris, warna).
-
Jika Anda ingin membagi kelas besar yang tidak memenuhi prinsip Tanggung Jawab Tunggal menjadi kelas-kelas yang lebih kecil dengan fungsionalitas profil sempit.
-
Jika ada kemungkinan perlunya melakukan perubahan pada logika pengoperasian entitas tertentu saat program sedang berjalan.
-
Jika perlu, sembunyikan implementasi dari klien kelas (perpustakaan).
Pro dan kontra dari pola tersebut
Seperti pola lainnya, Bridge memiliki kelebihan dan kekurangan. Manfaat Jembatan:- Meningkatkan skalabilitas kode - Anda dapat menambahkan fungsionalitas tanpa takut merusak sesuatu di bagian lain program.
- Mengurangi jumlah subkelas - berfungsi bila perlu menambah jumlah entitas dalam dua arah (misalnya, jumlah bentuk dan jumlah warna).
- Memungkinkan untuk bekerja secara terpisah pada dua cabang Abstraksi dan Implementasi yang independen - hal ini dapat dilakukan oleh dua pengembang berbeda tanpa mempelajari detail kode masing-masing.
- Mengurangi penggabungan kelas - satu-satunya tempat di mana dua kelas terhubung adalah jembatan (bidang
Color color
).
- Tergantung pada situasi spesifik dan struktur proyek secara keseluruhan, mungkin terdapat dampak negatif terhadap produktivitas program (misalnya, jika lebih banyak objek perlu diinisialisasi).
- Memperumit keterbacaan kode karena kebutuhan untuk bernavigasi antar kelas.
GO TO FULL VERSION