JavaRush /Blog Java /Random-MS /Corak Reka Bentuk Jambatan

Corak Reka Bentuk Jambatan

Diterbitkan dalam kumpulan
hello! Kami terus memahami topik yang luas dan sangat berguna - corak reka bentuk. Hari ini kita akan bercakap tentang Bridge. Seperti corak lain, Bridge berfungsi untuk menyelesaikan masalah biasa yang dihadapi oleh pembangun semasa mereka bentuk seni bina perisian. Mari kaji ciri-cirinya hari ini dan ketahui cara menggunakannya.

Apakah corak Jambatan?

Corak Jambatan ialah corak reka bentuk struktur. Iaitu, tugas utamanya adalah untuk mencipta struktur kelas dan objek yang lengkap. Bridge menyelesaikan masalah ini dengan membahagikan satu atau lebih kelas kepada hierarki yang berasingan - abstraksi dan pelaksanaan . Perubahan dalam fungsi dalam satu hierarki tidak memerlukan perubahan dalam hierarki yang lain. Semuanya kelihatan jelas, tetapi sebenarnya definisi ini kedengaran sangat luas dan tidak menjawab soalan utama: "Apakah corak Jambatan?" Saya fikir ini akan lebih mudah untuk anda fikirkan dalam amalan. Mari segera model contoh klasik untuk corak Jambatan. Kami mempunyai kelas abstrak Shapeyang secara amnya menerangkan angka geometri:
  • Shape.java

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

    Apabila kami memutuskan untuk menambah bentuk segi tiga dan segi empat tepat, kami akan mewarisi daripada kelas Shape:

  • 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 kami memperkenalkan konsep "warna". Iaitu, setiap angka akan mempunyai warna sendiri, di mana fungsi kaedah akan bergantung draw(). Untuk mempunyai pelaksanaan kaedah yang berbeza draw(), kita perlu mencipta kelas untuk setiap bentuk yang sepadan dengan warna. Jika terdapat tiga warna, maka terdapat enam kelas: TriangleBlack, TriangleGreen, TriangleRed, RectangleBlack, RectangleGreendan RectangleRed. Enam kelas bukanlah perkara yang besar. Tetapi! Jika kita perlu menambah bentuk atau warna baharu, bilangan kelas akan berkembang secara eksponen. Bagaimana untuk keluar dari situasi ini? Menyimpan warna dalam medan dan mencuba pilihan melalui bersyarat bukanlah penyelesaian terbaik. Penyelesaian yang baik adalah dengan memaparkan warna dalam antara muka yang berasingan . Tidak lama kemudian, mari kita buat antara muka Colordan tiga pelaksanaannya - 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 mari kita tambah medan jenis Colorpada kelas Shape- kita akan menerima nilainya dalam pembina.

  • Shape.java:

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

    colorKami akan menggunakan pembolehubah dalam pelaksanaan Shape. Ini bermakna bentuk kini boleh menggunakan kefungsian antara muka 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();
       }
    }
Di sini anda pergi! Kini kita boleh menghasilkan warna dan bentuk geometri yang berbeza walaupun ad infinitum, meningkatkan bilangan kelas dalam janjang aritmetik. Medan Color colorialah jambatan yang menghubungkan dua hierarki kelas yang berasingan.

Peranti jambatan: apakah itu abstraksi dan pelaksanaan

Mari kita lihat gambar rajah kelas yang menerangkan corak Jambatan: Pengenalan kepada 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 ialah:
  • Abstraksi - kelas Shape;
  • RefinedAbstraction - kelas Triangle, Rectangle;
  • Pelaksana - antara muka Color;
  • ConcreteImplementor - kelas BlackColor, GreenColordan RedColor.
Kelas Shapemewakili Abstraksi - mekanisme untuk mengawal pewarnaan bentuk dalam warna yang berbeza, yang mewakilkan Pelaksanaan kepada antara muka Color. Kelas Triangleialah Rectangleobjek sebenar yang menggunakan mekanisme yang ditawarkan oleh kelas Shape. BlackColor, GreenColordan RedColor- pelaksanaan khusus dalam cabang Pelaksanaan. Mereka sering dipanggil platform.

Di manakah corak Jambatan digunakan?

Kelebihan besar menggunakan corak ini ialah anda boleh membuat perubahan pada fungsi kelas dalam satu cawangan tanpa melanggar logik yang lain. Pendekatan ini juga membantu mengurangkan gandingan kelas program. Syarat utama untuk menggunakan corak ialah "ikut arahan": jangan melekatkannya di mana-mana! Sebenarnya, mari kita fikirkan dalam kes yang anda perlukan untuk menggunakan Bridge:
  1. Sekiranya perlu untuk mengembangkan bilangan entiti dalam dua arah (bentuk geometri, warna).

  2. Jika anda ingin membahagikan kelas besar yang tidak memenuhi prinsip tanggungjawab Tunggal kepada kelas yang lebih kecil dengan fungsi profil sempit.

  3. Sekiranya terdapat keperluan untuk membuat perubahan kepada logik operasi entiti tertentu semasa program sedang berjalan.

  4. Jika perlu, sembunyikan pelaksanaan daripada pelanggan kelas (perpustakaan).

Apabila menggunakan corak setiap kali, anda perlu ingat bahawa ia menambah entiti tambahan pada kod - tidak sepenuhnya logik untuk menggunakannya dalam projek di mana terdapat hanya satu angka geometri dan satu atau dua warna yang mungkin.

Kebaikan dan keburukan corak

Seperti corak lain, Jambatan mempunyai kelebihan dan kekurangan. Faedah Jambatan:
  1. Meningkatkan kebolehskalaan kod - anda boleh menambah kefungsian tanpa rasa takut memecahkan sesuatu dalam bahagian lain program.
  2. Mengurangkan bilangan subkelas - berfungsi apabila perlu untuk mengembangkan bilangan entiti dalam dua arah (contohnya, bilangan bentuk dan bilangan warna).
  3. Memungkinkan untuk bekerja secara berasingan pada dua cabang bebas Abstraksi dan Pelaksanaan - ini boleh dilakukan oleh dua pembangun berbeza tanpa menyelidiki butiran kod satu sama lain.
  4. Mengurangkan gandingan kelas - satu-satunya tempat di mana dua kelas disambungkan ialah jambatan (field Color color).
Kelemahan Jambatan:
  1. Bergantung pada situasi khusus dan struktur projek secara keseluruhan, mungkin terdapat kesan negatif terhadap produktiviti program (contohnya, jika lebih banyak objek perlu dimulakan).
  2. Menyukarkan kebolehbacaan kod kerana keperluan untuk menavigasi antara kelas.

Perbezaan daripada corak Strategi

Corak Jambatan sering dikelirukan dengan corak reka bentuk lain, Strategi. Kedua-duanya menggunakan komposisi (dalam contoh bentuk dan warna kami menggunakan pengagregatan, tetapi corak Jambatan juga boleh menggunakan komposisi) dengan 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 pertukaran algoritma, manakala Bridge memisahkan abstraksi daripada pelaksanaan untuk membolehkan pilihan antara pelaksanaan yang berbeza. Iaitu, Bridge, tidak seperti Strategi, digunakan untuk keseluruhan binaan atau struktur hierarki. Corak Jambatan boleh menjadi senjata yang baik dalam senjata pembangun; perkara utama ialah mencari situasi di mana ia berbaloi untuk menggunakannya, atau menggunakan beberapa corak lain. Jika anda belum biasa dengan templat lain, baca bahan ini:
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION