CodeGym /Blog Java /rawak /Corak Reka Bentuk Jambatan
John Squirrels
Tahap
San Francisco

Corak Reka Bentuk Jambatan

Diterbitkan dalam kumpulan
Hai! Kami kini terus menyelidiki topik berguna yang meluas dan sangat penting: corak reka bentuk. Hari ini mari kita bercakap tentang corak jambatan. Seperti corak lain, corak jambatan berfungsi untuk menyelesaikan masalah biasa yang dihadapi oleh pembangun semasa mereka bentuk seni bina perisian. Hari ini mari kita kaji ciri-ciri corak ini dan ketahui cara menggunakannya.

Apakah corak jambatan?

Corak jambatan ialah corak reka bentuk struktur. Dalam erti kata lain, tugas utamanya adalah untuk mencipta struktur lengkap daripada kelas dan objek. Jambatan melakukan ini dengan membahagikan satu atau lebih kelas kepada hierarki yang berasingan: abstraksi dan pelaksanaan . Perubahan dalam fungsi dalam satu hierarki tidak memerlukan perubahan dalam yang lain. Itu semua baik dan bagus, tetapi definisi ini sangat luas dan tidak menjawab soalan yang paling penting: "Apakah corak jambatan?" Saya rasa lebih mudah untuk anda memahami aplikasi praktikalnya. Jadi segera, mari buat senario klasik untuk corak jambatan. Kami mempunyai Shapekelas abstrak, yang mewakili angka geometri generik:
  • Shape.java

    
    public abstract class Shape {
       public abstract void draw();
    }
    

    Apabila kami memutuskan untuk menambah bentuk seperti segi tiga dan segi empat tepat, kami akan menjadikannya mewarisi Shapekelas:

  • Rectangle.java:

    
    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
    
  • Triangle.java:

    
    public class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing triangle");
       }
    }
    
Segala-galanya kelihatan mudah sehingga saat kami memperkenalkan konsep warna. Iaitu, setiap bentuk akan mempunyai warna sendiri, dan fungsi kaedah draw()akan bergantung pada warna ini. Untuk mempunyai pelaksanaan kaedah yang berbeza draw(), maka kita perlu mencipta kelas untuk setiap gabungan bentuk-warna. Jika kita mempunyai tiga warna, maka kita memerlukan enam kelas: TriangleBlack, TriangleGreen, TriangleRed, RectangleBlack, RectangleGreendan RectangleRed. Enam kelas bukan masalah besar. Tetapi! Jika kita perlu menambah bentuk atau warna baharu, maka bilangan kelas bertambah secara eksponen. Bagaimana untuk keluar dari situasi ini? Menyimpan warna dalam medan dan menghitung semua pilihan menggunakan pernyataan bersyarat bukanlah penyelesaian terbaik. Penyelesaian yang baik ialah memindahkan warna ke antara muka yang berasingan. Tidak lama kemudian, mari kita buat Colorantara muka dengan tiga pelaksanaan: BlackColor, GreenColordan RedColor:
  • Color.java:

    
    public interface Color {
       void fillColor();
    }
    
  • BlackColor.java:

    
    public class BlackColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in black color");
       }
    }
    
  • GreenColor.java

    
    public class GreenColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in green color");
       }
    }
    
  • RedColor.java

    
    public class RedColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in red color");
       }
    }
    

    Sekarang kita menambah Colormedan pada Shapekelas. Kami akan mendapat nilainya dalam pembina.

  • Shape.java:

    
    public abstract class Shape {
       protected Color color;
      
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }
    

    Kami akan menggunakan colorpembolehubah dalam Shapepelaksanaan. Ini bermakna bentuk kini boleh menggunakan kefungsian antara Colormuka.

  • Rectangle.java

    
    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
    
Ta-da! Kini kita boleh mencipta warna dan bentuk yang berbeza ad infinitum, dan bilangan kelas akan meningkat secara linear sahaja. Medan Color colorialah jambatan yang menghubungkan dua hierarki kelas yang berasingan.

Cara membina jambatan: abstraksi dan pelaksanaan

Mari lihat gambar rajah kelas yang menggambarkan corak jambatan: Memperkenalkan corak reka bentuk jambatan - 2Di sini anda boleh melihat dua struktur bebas yang boleh diubah suai tanpa menjejaskan fungsi satu sama lain. Dalam kes kami:
  • Abstraksi ialah Shapekelas
  • RefinedAbstraction ialah Triangledan Rectanglekelas
  • Pelaksana ialah Colorantara muka
  • ConcreteImplementor ialah BlackColor, GreenColordan RedColorkelas.
Kelas Shapeialah abstraksi — mekanisme untuk menguruskan pengisian bentuk dengan pelbagai warna, yang mewakilkan kepada Colorantara muka (Pelaksana). Kelas Triangledan Rectangleialah kelas konkrit yang menggunakan mekanisme yang disediakan oleh Shapekelas. BlackColor, GreenColordan RedColormerupakan pelaksanaan konkrit dalam hierarki Pelaksanaan.

Di mana untuk menggunakan corak jambatan

Faedah besar menggunakan corak ini ialah anda boleh membuat perubahan pada kelas berfungsi dalam satu hierarki tanpa melanggar logik yang lain. Selain itu, pendekatan ini membantu mengurangkan gandingan antara kelas. Keperluan utama apabila menggunakan corak ini ialah "ikut arahan" — jangan abaikan mana-mana daripadanya! Untuk itu, mari kita fikirkan situasi apabila anda pasti harus menggunakan corak jambatan:
  1. Jika anda perlu mengembangkan bilangan entiti berdasarkan gabungan dua konsep (cth bentuk dan warna).

  2. Jika anda ingin membahagikan kelas besar yang tidak memenuhi prinsip tanggungjawab tunggal kepada kelas yang lebih kecil yang mempunyai fungsi sempit.

  3. Jika perlu untuk membuat perubahan kepada logik entiti tertentu semasa program sedang berjalan.

  4. Jika perlu untuk menyembunyikan pelaksanaan daripada pelanggan kelas atau perpustakaan.

Apabila anda menggunakan corak ini, sentiasa ingat bahawa ia menambahkan entiti tambahan pada kod anda — mungkin tidak masuk akal untuk menggunakannya dalam projek yang hanya terdapat satu bentuk dan satu atau dua warna yang mungkin.

Kebaikan dan keburukan corak

Seperti corak lain, jambatan mempunyai kelebihan dan kekurangan. Kelebihan corak jambatan:
  1. Ia meningkatkan kebolehskalaan kod — anda boleh menambah kefungsian tanpa rasa takut memecahkan sesuatu dalam bahagian lain program.
  2. Ia mengurangkan bilangan subkelas apabila bilangan entiti sebaliknya akan berdasarkan gabungan dua konsep (contohnya, bentuk dan warna).
  3. Ia memungkinkan untuk bekerja secara berasingan pada dua hierarki yang berasingan - Abstraksi dan Pelaksanaan. Dua pembangun berbeza boleh membuat perubahan tanpa menyelidiki butiran kod satu sama lain.
  4. Ia mengurangkan gandingan antara kelas — satu-satunya tempat di mana kedua-dua kelas digabungkan ialah jambatan (iaitu medan Color color).
Kelemahan corak jambatan:
  1. Bergantung pada situasi khusus dan struktur keseluruhan projek, ia boleh memberi kesan negatif kepada prestasi program (contohnya, jika anda perlu memulakan lebih banyak objek).
  2. Ia menjadikan kod kurang boleh dibaca kerana keperluan untuk bertukar antara dua kelas.

Perbezaan daripada corak strategi

Corak jambatan sering dikelirukan dengan corak reka bentuk lain — strategi. Kedua-duanya menggunakan komposisi (walaupun kami menggunakan pengagregatan dalam contoh dengan angka dan warna, corak Jambatan juga boleh menggunakan komposisi), mewakilkan kerja kepada objek lain. Tetapi terdapat perbezaan di antara mereka, dan ia sangat besar. Corak strategi ialah corak tingkah laku: ia menyelesaikan masalah yang sama sekali berbeza. Strategi membolehkan algoritma ditukar ganti, manakala jambatan memisahkan abstraksi daripada pelaksanaan untuk memilih antara pelaksanaan yang berbeza. Dalam erti kata lain, tidak seperti strategi, jambatan digunakan untuk keseluruhan entiti atau struktur hierarki. Corak jambatan boleh menjadi senjata yang baik dalam senjata pemaju. Perkara utama ialah mengenal pasti situasi di mana ia berbaloi untuk menggunakannya dan mengenali apabila beberapa corak lain sesuai.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION