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 mempunyaiShape
kelas 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
Shape
kelas: -
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"); } }
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
, RectangleGreen
dan 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 Color
antara muka dengan tiga pelaksanaan: BlackColor
, GreenColor
dan 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
Color
medan padaShape
kelas. 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
color
pembolehubah dalamShape
pelaksanaan. Ini bermakna bentuk kini boleh menggunakan kefungsian antaraColor
muka. -
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
ialah jambatan yang menghubungkan dua hierarki kelas yang berasingan.
Cara membina jambatan: abstraksi dan pelaksanaan
Mari lihat gambar rajah kelas yang menggambarkan corak jambatan:
- Abstraksi ialah
Shape
kelas - RefinedAbstraction ialah
Triangle
danRectangle
kelas - Pelaksana ialah
Color
antara muka - ConcreteImplementor ialah
BlackColor
,GreenColor
danRedColor
kelas.
Shape
ialah abstraksi — mekanisme untuk menguruskan pengisian bentuk dengan pelbagai warna, yang mewakilkan kepada Color
antara muka (Pelaksana). Kelas Triangle
dan Rectangle
ialah kelas konkrit yang menggunakan mekanisme yang disediakan oleh Shape
kelas. BlackColor
, GreenColor
dan RedColor
merupakan 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:-
Jika anda perlu mengembangkan bilangan entiti berdasarkan gabungan dua konsep (cth bentuk dan warna).
-
Jika anda ingin membahagikan kelas besar yang tidak memenuhi prinsip tanggungjawab tunggal kepada kelas yang lebih kecil yang mempunyai fungsi sempit.
-
Jika perlu untuk membuat perubahan kepada logik entiti tertentu semasa program sedang berjalan.
-
Jika perlu untuk menyembunyikan pelaksanaan daripada pelanggan kelas atau perpustakaan.
Kebaikan dan keburukan corak
Seperti corak lain, jambatan mempunyai kelebihan dan kekurangan. Kelebihan corak jambatan:- Ia meningkatkan kebolehskalaan kod — anda boleh menambah kefungsian tanpa rasa takut memecahkan sesuatu dalam bahagian lain program.
- Ia mengurangkan bilangan subkelas apabila bilangan entiti sebaliknya akan berdasarkan gabungan dua konsep (contohnya, bentuk dan warna).
- 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.
- Ia mengurangkan gandingan antara kelas — satu-satunya tempat di mana kedua-dua kelas digabungkan ialah jambatan (iaitu medan
Color color
).
- Bergantung pada situasi khusus dan struktur keseluruhan projek, ia boleh memberi kesan negatif kepada prestasi program (contohnya, jika anda perlu memulakan lebih banyak objek).
- Ia menjadikan kod kurang boleh dibaca kerana keperluan untuk bertukar antara dua kelas.
GO TO FULL VERSION