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ň.Shape
Adatç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"); } }
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 :TriangleGreen
TriangleRed
RectangleBlack
RectangleGreen
RectangleRed
Color
BlackColor
GreenColor
RedColor
-
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"); } }
Color
Indi 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
color
ulanarysShape
. Bu şekilleriň indi interfeýsiň işleýşini ulanyp biljekdigini aňladýarColor
. -
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(); } }
Color color
iki 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ň: Bu ý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
; BlackColor
Beton ýerine ýetiriji - synplarGreenColor
weRedColor
.
Shape
abstraksiý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 Triangle
zatlardyr . , we - ýerine ýetiriş bölüminde aýratyn durmuşa geçirişler. Olara köplenç platforma diýilýär. Rectangle
Shape
BlackColor
GreenColor
RedColor
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ň:-
Eger subýektleriň sanyny iki ugra (geometrik şekiller, reňkler) giňeltmek zerur bolsa.
-
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.
-
Programma işleýän wagtynda käbir guramalaryň işiniň logikasyna üýtgeşmeler girizmek zerurlygy bar bolsa.
-
Zerur bolsa, ýerine ýetirişini synp (kitaphana) müşderilerinden gizläň.
Nagyşyň oňaýly taraplary
Beýleki nagyşlar ýaly köpriniň hem artykmaçlyklary, hem kemçilikleri bar. Köpriniň peýdalary:- Kod ölçegliligini gowulandyrýar - programmanyň başga bir böleginde bir zady döwmekden gorkman işlemegi goşup bilersiňiz.
- 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).
- 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.
- Sapaklaryň birleşmegini azaltmak - iki synpyň birleşdirilen ýeke-täk ýeri köpri (meýdan
Color color
).
- 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).
- Sapaklaryň arasynda gezmegiň zerurlygy sebäpli kod okalmagyny kynlaşdyrýar.
GO TO FULL VERSION