CodeGym /Blog Jawa /Acak /Pola Desain Jembatan
John Squirrels
tingkat
San Francisco

Pola Desain Jembatan

Diterbitake ing grup
Hi! Saiki kita terus nyelidiki topik migunani sing ekstensif lan super penting: pola desain. Dina iki ayo ngomong babagan pola jembatan. Kaya pola liyane, pola jembatan serves kanggo ngatasi masalah khas sing ditemoni pangembang nalika ngrancang arsitektur piranti lunak. Dina iki, ayo sinau fitur saka pola iki lan mangerteni carane nggunakake.

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 duwe Shapekelas 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");
       }
    }
    
Kabeh katon prasaja nganti saiki kita ngenalake konsep warna. Sing, saben wangun bakal duwe werna dhewe, lan fungsi saka 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 menyang Shapekelas. 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 ing Shapeimplementasine. Iki tegese wangun saiki bisa nggunakake fungsi antarmuka Color.

  • 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();
       }
    }
    
Ta-da! Saiki kita bisa nggawe macem-macem werna lan wangun ad infinitum, lan nomer kelas bakal nambah mung linearly. Lapangan kasebut 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: Ngenalake pola desain jembatan - 2Kene sampeyan bisa ndeleng loro struktur sawijining sing bisa diowahi tanpa mengaruhi fungsi saben liyane. Ing kasus kita:
  • Abstraksi yaiku Shapekelas
  • RefinedAbstraction yaiku Trianglelan Rectanglekelas
  • Implementor minangka Colorantarmuka
  • ConcreteImplementor yaiku BlackColor, GreenColorlan RedColorkelas.
Kelas 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:
  1. Yen sampeyan perlu kanggo nggedhekake nomer èntitas adhedhasar kombinasi saka rong konsep (eg wangun lan werna).

  2. Yen sampeyan pengin mbagi kelas gedhe sing ora cocog karo prinsip tanggung jawab siji dadi kelas sing luwih cilik sing nduweni fungsi sing sempit.

  3. Yen perlu kanggo ngganti logika entitas tartamtu nalika program lagi mlaku.

  4. Yen perlu kanggo ndhelikake implementasine saka klien saka kelas utawa perpustakaan.

Nalika sampeyan nggunakake pola iki, tansah elinga yen iku nambah entitas tambahan kanggo kode - iku bisa uga ora nggawe pangertèn kanggo nggunakake ing project ngendi ana mung siji wangun lan siji utawa loro werna bisa.

Pros lan cons saka pola

Kaya pola liyane, jembatan duwe kaluwihan lan kekurangan. Kaluwihan saka pola jembatan:
  1. Iku mbenakake skalabilitas kode - sampeyan bisa nambah fungsi tanpa wedi bejat soko ing bagean liyane saka program.
  2. Ngurangi jumlah subkelas nalika jumlah entitas bakal adhedhasar kombinasi saka rong konsep (contone, wangun lan werna).
  3. 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.
  4. Iku nyuda kopling antarane kelas - siji-sijine papan ing ngendi rong kelas digandhengake yaiku jembatan (yaiku Color colorlapangan).
Kekurangan pola jembatan:
  1. Gumantung ing kahanan tartamtu lan struktur sakabèhé saka project, iku bisa impact negatif ing kinerja program (contone, yen sampeyan kudu initialize liyane obyek).
  2. Iki ndadekake kode kurang bisa diwaca amarga kudu ngalih ing antarane rong kelas kasebut.

Bedane saka pola strategi

Pola jembatan asring bingung karo pola desain liyane - strategi. Loro-lorone nggunakake komposisi (sanajan kita nggunakake agregasi ing conto karo tokoh lan werna, pola Bridge uga bisa nggunakake komposisi), delegating karya kanggo obyek liyane. Nanging ana prabédan antarane wong-wong mau, lan iku ageng. Pola strategi minangka pola prilaku: ngrampungake masalah sing beda-beda. Strategy ngidini algoritma bisa diganti, nalika jembatan misahake abstraksi saka implementasine kanggo milih antarane implementasine beda. Ing tembung liya, ora kaya strategi, jembatan ditrapake kanggo kabeh entitas utawa struktur hierarki. Pola jembatan bisa dadi senjata sing apik ing arsenal pangembang. Wangsulan: Bab ingkang utama kanggo ngenali kahanan ing ngendi iku worth nggunakake lan ngenali nalika sawetara pola liyane cocok.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION