Apa pola jembatan?
Pola jembatan minangka pola desain struktural. Kanthi tembung liyane, tugas utamane yaiku nggawe struktur lengkap saka kelas lan obyek. Jembatan nindakake iki kanthi mbagi siji utawa luwih kelas dadi hierarki sing kapisah: abstraksi lan implementasine . Owah-owahan fungsi ing siji hirarki ora mbutuhake owah-owahan ing liyane. Iku kabeh apik lan apik, nanging definisi iki jembar banget lan ora njawab pitakonan sing paling penting: "Apa pola jembatan?" Aku bakal luwih gampang sampeyan ngerti aplikasi praktis. Dadi langsung, ayo nggawe skenario klasik kanggo pola jembatan. Kita duweShapekelas abstrak, sing nggambarake tokoh geometris umum:
-
Wangun.Jawa
public abstract class Shape { public abstract void draw(); }Nalika kita mutusake kanggo nambah wangun kaya segitiga lan persegi dowo, kita bakal nggawe wong warisan
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"); } }
draw()cara bakal gumantung ing werna iki. Kanggo duwe implementasine beda saka draw()cara, banjur kita kudu nggawe kelas kanggo saben kombinasi wangun-werna. Yen kita duwe telung werna, banjur kita kudu enem kelas: TriangleBlack, TriangleGreen, TriangleRed, RectangleBlack, RectangleGreenlan RectangleRed. Enem kelas ora dadi masalah gedhe. Nanging! Yen kita kudu nambah wangun utawa werna anyar, banjur nomer kelas tuwuh exponentially. Carane metu saka kahanan iki? Nyimpen warna ing lapangan lan enumerasi kabeh opsi nggunakake pernyataan kondisional dudu solusi sing paling apik. Solusi sing apik yaiku mindhah warna menyang antarmuka sing kapisah. Ora suwe ngandika rampung: ayo nggawe Colorantarmuka kanthi telung implementasine: BlackColor, GreenColorlan RedColor:
-
Warna.Jawa:
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"); } }Saiki kita nambah
Colorlapangan menyangShapekelas. Kita bakal entuk regane ing konstruktor. -
Shape.java:
public abstract class Shape { protected Color color; public Shape(Color color) { this.color = color; } public abstract void draw(); }Kita bakal nggunakake
colorvariabel ingShapeimplementasine. Iki tegese wangun saiki bisa nggunakake fungsi antarmukaColor. -
Persegi panjang.java
public class Rectangle extends Shape { public Rectangle(Color color) { super(color); } @Override public void draw() { System.out.println("Drawing rectangle"); color.fillColor(); } }
Color colorminangka jembatan sing nyambungake rong hirarki kelas sing kapisah.
Carane mbangun jembatan: abstraksi lan implementasine
Ayo kang katon ing diagram kelas sing nggambarake pola jembatan:
Kene sampeyan bisa ndeleng loro struktur sawijining sing bisa diowahi tanpa mengaruhi fungsi saben liyane. Ing kasus kita:
- Abstraksi yaiku
Shapekelas - RefinedAbstraction yaiku
TrianglelanRectanglekelas - Implementor minangka
Colorantarmuka - ConcreteImplementor yaiku
BlackColor,GreenColorlanRedColorkelas.
Shapeminangka abstraksi - mekanisme kanggo ngatur ngisi wangun kanthi macem-macem warna, sing utusan menyang antarmuka Color(Implementor). Kelas Trianglelan Rectangleminangka kelas konkrit sing nggunakake mekanisme sing kasedhiya ing Shapekelas kasebut. BlackColor, GreenColorlan RedColorminangka implementasi konkrit ing hierarki Implementasi.
Ngendi nggunakake pola jembatan
Kauntungan gedhe saka nggunakake pola iki yaiku sampeyan bisa ngganti kelas fungsional ing siji hierarki tanpa ngrusak logika liyane. Uga, pendekatan iki mbantu nyuda kopling antarane kelas. Syarat utama nalika nggunakake pola iki yaiku "tindakake pandhuane" - aja nglirwakake apa wae! Kanggo tujuan kasebut, ayo goleki kahanan nalika sampeyan kudu nggunakake pola jembatan:-
Yen sampeyan perlu kanggo nggedhekake nomer èntitas adhedhasar kombinasi saka rong konsep (eg wangun lan werna).
-
Yen sampeyan pengin mbagi kelas gedhe sing ora cocog karo prinsip tanggung jawab siji dadi kelas sing luwih cilik sing nduweni fungsi sing sempit.
-
Yen perlu kanggo ngganti logika entitas tartamtu nalika program lagi mlaku.
-
Yen perlu kanggo ndhelikake implementasine saka klien saka kelas utawa perpustakaan.
Pros lan cons saka pola
Kaya pola liyane, jembatan duwe kaluwihan lan kekurangan. Kaluwihan saka pola jembatan:- Iku mbenakake skalabilitas kode - sampeyan bisa nambah fungsi tanpa wedi bejat soko ing bagean liyane saka program.
- Ngurangi jumlah subkelas nalika jumlah entitas bakal adhedhasar kombinasi saka rong konsep (contone, wangun lan werna).
- Iku ndadekake iku bisa kanggo kapisah bisa ing loro hirarki kapisah - Abstraksi lan Implementasine. Rong pangembang sing beda bisa nggawe owah-owahan tanpa ngerteni rincian kode siji-sijine.
- Iku nyuda kopling antarane kelas - siji-sijine papan ing ngendi rong kelas digandhengake yaiku jembatan (yaiku
Color colorlapangan).
- Gumantung ing kahanan tartamtu lan struktur sakabèhé saka project, iku bisa impact negatif ing kinerja program (contone, yen sampeyan kudu initialize liyane obyek).
- Iki ndadekake kode kurang bisa diwaca amarga kudu ngalih ing antarane rong kelas kasebut.
GO TO FULL VERSION