JavaRush /Java Blog /Random-ID /Pola Desain Jembatan

Pola Desain Jembatan

Dipublikasikan di grup Random-ID
Halo! Kami terus memahami topik yang luas dan sangat berguna - pola desain. Hari ini kita akan berbicara tentang Jembatan. Seperti pola lainnya, Bridge berfungsi untuk memecahkan masalah umum yang dihadapi pengembang ketika merancang arsitektur perangkat lunak. Mari pelajari fitur-fiturnya hari ini dan cari tahu cara menggunakannya.

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 abstrak Shapeyang 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");
       }
    }
Semuanya terlihat sederhana hingga kami memperkenalkan konsep “warna”. Artinya, setiap gambar akan memiliki warnanya sendiri, yang menjadi dasar fungsi metode ini 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, RectangleGreendan 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 Colordan tiga implementasinya - BlackColor, GreenColordan 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 Colorke kelas Shape- 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();
    }

    colorKami akan menggunakan variabel dalam implementasi Shape. Ini berarti bahwa bentuk sekarang dapat menggunakan fungsionalitas antarmuka Color.

  • Rectangle.java

    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
Ini dia! Sekarang kita dapat menghasilkan warna dan bentuk geometris yang berbeda bahkan tanpa batas, sehingga menambah jumlah kelas dalam perkembangan aritmatika. Bidang tersebut Color colormerupakan jembatan yang menghubungkan dua hierarki kelas yang terpisah.

Perangkat jembatan: apa itu abstraksi dan implementasi

Mari kita lihat diagram kelas yang menggambarkan pola Bridge: Pengenalan pola desain Jembatan - 2Di 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, GreenColordan RedColor.
Kelas Shapemewakili Abstraksi - mekanisme untuk mengontrol pewarnaan bentuk dalam warna berbeda, yang mendelegasikan Implementasi ke antarmuka Color. Kelas Triangleadalah Rectangleobjek nyata yang menggunakan mekanisme yang ditawarkan oleh kelas tersebut Shape. BlackColor, GreenColordan 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:
  1. Jika perlu untuk memperluas jumlah entitas dalam dua arah (bentuk geometris, warna).

  2. Jika Anda ingin membagi kelas besar yang tidak memenuhi prinsip Tanggung Jawab Tunggal menjadi kelas-kelas yang lebih kecil dengan fungsionalitas profil sempit.

  3. Jika ada kemungkinan perlunya melakukan perubahan pada logika pengoperasian entitas tertentu saat program sedang berjalan.

  4. Jika perlu, sembunyikan implementasi dari klien kelas (perpustakaan).

Saat menggunakan suatu pola setiap kali, Anda harus ingat bahwa pola tersebut menambahkan entitas tambahan ke dalam kode - tidak sepenuhnya logis untuk menggunakannya dalam proyek di mana hanya ada satu bentuk geometris dan satu atau dua kemungkinan warna.

Pro dan kontra dari pola tersebut

Seperti pola lainnya, Bridge memiliki kelebihan dan kekurangan. Manfaat Jembatan:
  1. Meningkatkan skalabilitas kode - Anda dapat menambahkan fungsionalitas tanpa takut merusak sesuatu di bagian lain program.
  2. Mengurangi jumlah subkelas - berfungsi bila perlu menambah jumlah entitas dalam dua arah (misalnya, jumlah bentuk dan jumlah warna).
  3. 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.
  4. Mengurangi penggabungan kelas - satu-satunya tempat di mana dua kelas terhubung adalah jembatan (bidang Color color).
Kekurangan Jembatan:
  1. Tergantung pada situasi spesifik dan struktur proyek secara keseluruhan, mungkin terdapat dampak negatif terhadap produktivitas program (misalnya, jika lebih banyak objek perlu diinisialisasi).
  2. Memperumit keterbacaan kode karena kebutuhan untuk bernavigasi antar kelas.

Perbedaan dari pola Strategi

Pola Jembatan sering disalahartikan dengan pola desain lainnya, Strategi. Keduanya menggunakan komposisi (dalam contoh bentuk dan warna kami menggunakan agregasi, namun pola Bridge juga dapat menggunakan komposisi) dengan mendelegasikan pekerjaan ke objek lain. Namun ada perbedaan di antara keduanya, dan itu sangat besar. Pola Strategi adalah pola perilaku: pola ini memecahkan masalah yang sangat berbeda. Strategi memungkinkan pertukaran algoritma, sementara Bridge memisahkan abstraksi dari implementasi untuk memungkinkan pilihan antara implementasi yang berbeda. Artinya, Bridge, tidak seperti Strategi, berlaku untuk keseluruhan konstruksi atau struktur hierarki. Pola Bridge bisa menjadi senjata yang bagus dalam gudang senjata pengembang; hal utama adalah menemukan situasi di mana layak untuk digunakan, atau menggunakan pola lain. Jika Anda belum familiar dengan template lainnya, bacalah materi berikut:
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION