JavaRush /Java Blog /Random-TK /Köpri dizaýn nusgasy

Köpri dizaýn nusgasy

Toparda çap edildi
Salam! Giň we örän peýdaly mowzuga - dizaýn nagyşlaryna düşünmäge dowam edýäris. Bu gün köpri hakda gürleşeris. Bridge, beýleki nagyşlar ýaly, programma arhitekturasy dizaýn edilende bir döredijiniň ýüzbe-ýüz bolýan umumy meselelerini çözmäge hyzmat edýär. Geliň, şu gün onuň aýratynlyklaryny öwreneliň we nädip ulanmalydygyny öwreneliň.

Köpriniň nagşy näme?

Köpriniň nagşy gurluş dizaýn nagşydyr. .Agny, onuň esasy wezipesi synplaryň we obýektleriň doly gurluşyny döretmekdir. Bridge bu meseläni bir ýa-da birnäçe synpy aýratyn iýerarhiýa - abstraksiýa we durmuşa geçirmek arkaly çözýär . Bir iýerarhiýada işlemegiň üýtgemegi beýlekisinde üýtgeşme döretmeýär. Hemme zat düşnükli ýaly, ýöne aslynda bu kesgitleme gaty giň ýaly bolup, esasy soraga jogap bermeýär: "Köpriniň nagşy näme?" Iş ýüzünde düşünmek size has aňsat bolar diýip pikir edýärin. Geliň, köpri nagşy üçin derrew nusgawy bir mysal alalyň. ShapeAdatça geometrik şekili suratlandyrýan abstrakt synpymyz bar :
  • Şekil

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

    Üçburçluk we gönüburçluk şekilleri goşmak kararyna gelenimizde, synpdan miras alarys Shape:

  • Gönüburçly.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");
       }
    }
“Reňk” düşünjesini hödürleýänçäk hemme zat ýönekeý görünýär. .Agny, her bir şekiliň, işleýşine bagly boljak öz reňki bolar draw(). Usulyň dürli durmuşa geçirilmegi üçin draw(), bir reňke laýyk gelýän her bir şekil üçin synp döretmeli. Üç reňk bar bolsa, onda alty synp bar : TriangleBlack,,,, we . Alty synp beýle bir uly zat däl. Emma! Täze görnüş ýa-da reňk goşmaly bolsa, synplaryň sany çalt artar. Bu ýagdaýdan nädip çykmaly? Meýdanda reňkleri saklamak we şertleri ulanyp görmek iň oňat çözgüt däl. Gowy çözgüt, aýratyn interfeýsde reňk görkezmekdir . Edileninden gysga wagtda aýdylmady: geliň, interfeýs döredeliň we üç sany ýerine ýetiriş - we :TriangleGreenTriangleRedRectangleBlackRectangleGreenRectangleRedColorBlackColorGreenColorRedColor
  • Reňk.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");
       }
    }

    ColorIndi synpa bir görnüş meýdany goşalyň Shape- biz onuň bahasyny konstruktorda alarys.

  • Şekil.java:

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

    Üýtgeýjini durmuşa geçirişde colorulanarys Shape. Bu şekilleriň indi interfeýsiň işleýşini ulanyp biljekdigini aňladýar Color.

  • Gönüburçluk.java

    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
Ine, git! Indi arifmetiki ösüşdäki synplaryň sanyny köpeldip, dürli reňkleri we geometrik şekilleri hatda mahabat çäksiz öndürip bileris. Meýdan Color coloriki aýry synp iýerarhiýasyny birleşdirýän köpri.

Köprü enjamy: abstraksiýa we ýerine ýetiriş näme

Köpriniň nagşyny suratlandyrýan synp diagrammasyna göz aýlalyň: Köpriniň dizaýn nagşy bilen tanyşlyk - 2Bu ýerde biri-biriniň işleýşine täsir etmezden üýtgedilip bilinjek iki sany garaşsyz gurluşy görüp bilersiňiz. Biziň ýagdaýymyzda:
  • Abstraksiýa - synp Shape;
  • Arassalanan abstraksiýa - synplar Triangle, Rectangle;
  • Lementerine ýetiriji - interfeýs Color;
  • BlackColorBeton ýerine ýetiriji - synplar GreenColorwe RedColor.
Bu synp Shapeabstraksiýany aňladýar - şekilleri dürli reňkdäki reňklere gözegçilik etmegiň mehanizmi, ýerine ýetirişi interfeýsine berýär Color. Sapaklar synpyň hödürleýän mehanizmini ulanýan hakyky Trianglezatlardyr . , we - ýerine ýetiriş bölüminde aýratyn durmuşa geçirişler. Olara köplenç platforma diýilýär. RectangleShapeBlackColorGreenColorRedColor

Köpri nagşy nirede ulanylýar?

Bu nagşy ulanmagyň uly artykmaçlygy, bir şahada synplaryň işleýşine başga bir logikany bozman üýtgeşmeler girizip bilersiňiz. Bu çemeleşme, şeýle hem, programma sapaklarynyň baglanyşygyny azaltmaga kömek edýär. Nagyşlary ulanmagyň esasy şerti "görkezmelere eýermek": olary hiç ýere ýapmaň! Aslynda, köprüden haýsy ýagdaýlarda hökman peýdalanmalydygyňyzy kesgitläliň:
  1. Eger subýektleriň sanyny iki ugra (geometrik şekiller, reňkler) giňeltmek zerur bolsa.

  2. Responsibilityeke-täk jogapkärçilik ýörelgesine laýyk gelmeýän uly synpy dar profilli işleýşi bilen kiçi synplara bölmek isleseňiz.

  3. Programma işleýän wagtynda käbir guramalaryň işiniň logikasyna üýtgeşmeler girizmek zerurlygy bar bolsa.

  4. Zerur bolsa, ýerine ýetirişini synp (kitaphana) müşderilerinden gizläň.

Her gezek nagyş ulananyňyzda, koda goşmaça birlik goşýandygyny ýadyňyzdan çykarmaly dälsiňiz - diňe bir geometrik şekil we bir ýa-da iki reňk bar bolan taslamada ulanmak düýbünden mantykly däl.

Nagyşyň oňaýly taraplary

Beýleki nagyşlar ýaly köpriniň hem artykmaçlyklary, hem kemçilikleri bar. Köpriniň peýdalary:
  1. Kod ölçegliligini gowulandyrýar - programmanyň başga bir böleginde bir zady döwmekden gorkman işlemegi goşup bilersiňiz.
  2. Kiçi toparlaryň sanyny azaldýar - subýektleriň sanyny iki tarapa giňeltmek zerur bolanda işleýär (mysal üçin şekilleriň sany we reňkleriň sany).
  3. Abstraksiýanyň we durmuşa geçirmegiň iki garaşsyz şahasynda aýratyn işlemäge mümkinçilik berýär - muny iki dürli dörediji biri-biriniň kodunyň jikme-jikliklerine göz aýlamazdan edip biler.
  4. Sapaklaryň birleşmegini azaltmak - iki synpyň birleşdirilen ýeke-täk ýeri köpri (meýdan Color color).
Köpriniň kemçilikleri:
  1. Aýratyn ýagdaýa we umuman taslamanyň gurluşyna baglylykda, programma öndürijiligine ýaramaz täsir edip biler (mysal üçin, has köp obýekt başlamaly bolsa).
  2. Sapaklaryň arasynda gezmegiň zerurlygy sebäpli kod okalmagyny kynlaşdyrýar.

Strategiýanyň nusgasyndan tapawut

Köpri nagşy köplenç başga bir dizaýn nagşy, Strategiýa bilen bulaşýar. Ikisi-de eseri beýleki obýektlere tabşyrmak bilen kompozisiýany ulanýarlar (şekilleri we reňkleri mysalda jemledik, ýöne köpri nagşy kompozisiýany hem ulanyp biler). Emma olaryň arasynda tapawut bar we bu gaty uly. Strategiýanyň nusgasy özüni alyp barşyň nusgasy: düýbünden başga meseleleri çözýär. Strategiýa algoritmleriň çalşylmagyna mümkinçilik berýär, köpri bolsa abstraksiýany dürli amallaryň arasynda saýlamaga mümkinçilik bermek üçin abstraksiýany ýerine ýetirmekden aýyrýar. Bridgeagny, köpri, Strategiýadan tapawutlylykda, ähli gurluşyklara ýa-da iýerarhiki gurluşlara degişlidir. Köpri nagşy, döredijiniň arsenalynda gowy ýarag bolup biler; esasy zat, ulanmaga mynasyp bolan ýagdaýlary tapmak ýa-da başga bir nagyş ulanmak. Beýleki şablonlar bilen entek tanyş däl bolsaňyz, şu materiallary okaň:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION