Apa pola Bridge?
Pola jembatan minangka pola desain struktural. Yaiku, tugas utamane yaiku nggawe struktur lengkap kelas lan obyek. Bridge ngrampungake masalah iki kanthi misahake siji utawa luwih kelas dadi hierarki sing kapisah - abstraksi lan implementasine . Owah-owahan fungsi ing siji hirarki ora mbutuhake owah-owahan ing liyane. Kabeh katon cetha, nanging nyatane definisi iki muni banget lan ora njawab pitakonan utama: "Apa pola Bridge?" Aku iki bakal luwih gampang kanggo sampeyan ngerti ing laku. Ayo langsung model conto klasik kanggo pola Bridge. Kita duwe kelas abstrakShape
sing umume nggambarake tokoh geometris:
-
Wangun.Jawa
public abstract class Shape { public abstract void draw(); }
Nalika kita mutusake kanggo nambah wangun segi telu lan persegi dowo, kita bakal oleh warisan saka 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"); } }
draw()
. Kanggo duwe implementasine beda saka cara draw()
, kita kudu nggawe kelas kanggo saben wangun sing cocog karo werna. Yen ana telung werna, banjur ana enem kelas: TriangleBlack
, TriangleGreen
, TriangleRed
, RectangleBlack
, RectangleGreen
lan RectangleRed
. Enem kelas ora dadi gedhe. Nanging! Yen kita kudu nambah wangun utawa werna anyar, jumlah kelas bakal tuwuh kanthi eksponensial. Carane metu saka kahanan iki? Nyimpen warna ing lapangan lan nyoba opsi liwat kondisional dudu solusi sing paling apik. Solusi sing apik yaiku nampilake warna ing antarmuka sing kapisah . Ora let suwe, ayo nggawe antarmuka Color
lan telung implementasine - BlackColor
, GreenColor
lan 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 ayo nambah lapangan jinis
Color
menyang kelasShape
- kita bakal nampa nilai kasebut ing konstruktor. -
Shape.java:
public abstract class Shape { protected Color color; public Shape(Color color) { this.color = color; } public abstract void draw(); }
color
Kita bakal nggunakake variabel ing implementasineShape
. 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 color
minangka jembatan sing nyambungake rong hirarki kelas sing kapisah.
Piranti jembatan: apa abstraksi lan implementasine
Ayo kang njupuk dipikir ing diagram kelas sing njlèntrèhaké pola Bridge: Kene sampeyan bisa ndeleng loro struktur sawijining sing bisa diowahi tanpa mengaruhi fungsi saben liyane. Ing kasus kita yaiku:- Abstraksi - kelas
Shape
; - RefinedAbstraction - kelas
Triangle
,;Rectangle
- Implementor - antarmuka
Color
; - ConcreteImplementor - kelas
BlackColor
,GreenColor
lanRedColor
.
Shape
nggambarake Abstraksi - mekanisme kanggo ngontrol pewarnaan wujud kanthi warna sing beda-beda, sing utusan Implementasi menyang antarmuka Color
. Kelas Triangle
minangka Rectangle
obyek nyata sing nggunakake mekanisme sing ditawakake kelas kasebut Shape
. BlackColor
, GreenColor
lan RedColor
- implementasi khusus ing cabang Implementasi. Padha asring disebut platform.
Ing ngendi pola Bridge digunakake?
Kauntungan gedhe saka nggunakake pola iki yaiku sampeyan bisa ngganti fungsi kelas ing siji cabang tanpa ngilangi logika liyane. Pendekatan iki uga mbantu nyuda kopling kelas program. Kondisi utama kanggo nggunakake pola yaiku "tindakake pandhuane": aja nempel ing endi wae! Bener, ayo ngerteni ing kasus apa sampeyan kudu nggunakake Bridge:-
Yen perlu kanggo nggedhekake jumlah entitas ing rong arah (wangun geometris, werna).
-
Yen sampeyan pengin dibagi kelas gedhe sing ora ketemu prinsip tanggung jawab Tunggal menyang kelas cilik karo fungsi sempit-profil.
-
Yen ana perlu kanggo nggawe owah-owahan ing logika saka operasi entitas tartamtu nalika program lagi mlaku.
-
Yen perlu, ndhelikake implementasine saka klien kelas (perpustakaan).
Pros lan cons saka pola
Kaya pola liyane, Bridge duwe kaluwihan lan cacat. Keuntungan saka Bridge:- Ngapikake skalabilitas kode - sampeyan bisa nambah fungsi tanpa wedi ngrusak soko ing bagean liyane saka program.
- Nyuda jumlah subclasses - dianggo nalika perlu kanggo nggedhekake nomer entitas ing rong arah (contone, nomer wangun lan nomer werna).
- Bisa digunakake kanthi kapisah ing rong cabang Abstraksi lan Implementasi independen - iki bisa ditindakake dening rong pangembang sing beda-beda tanpa nyelidiki rincian kode saben liyane.
- Ngurangi kopling kelas - siji-sijine papan ing ngendi rong kelas disambungake yaiku jembatan (lapangan
Color color
).
- Gumantung ing kahanan tartamtu lan struktur proyek kanthi sakabehe, bisa uga ana pengaruh negatif ing produktivitas program (contone, yen luwih akeh obyek kudu diinisialisasi).
- Complicates maca kode amarga perlu kanggo navigasi antarane kelas.
GO TO FULL VERSION