Bromønsteret i Java

1. Oversikt

Den offisielle definisjonen for Bridge designmønsteret introdusert av Gang of Four (GoF) er å koble fra en abstraksjon fra implementeringen, slik at de to kan variere uavhengig.

Dette betyr å lage et brogrensesnitt som bruker OOP-prinsipper for å skille ut ansvar i forskjellige abstrakte klasser.

2. Bromønstereksempel

For Bridge-mønsteret vil vi vurdere to lag med abstraksjon; den ene er den geometriske formen (som trekant og firkant) som er fylt med forskjellige farger (vårt andre abstraksjonslag):

Først definerer vi et fargegrensesnitt:

offentlig grensesnitt Color {String fill (); }

Nå lager vi en konkret klasse for dette grensesnittet:

offentlig klasse Blå redskaper Farge {@ Override offentlig Strengfyll () {retur "Farge er blå"; }}

La oss nå lage et abstrakt Form klasse som består av en referanse (bro) til Farge gjenstand:

offentlig abstrakt klasse Form {beskyttet Farge farge; // standard konstruktører abstrakt offentlig Strengtegning (); }

Vi skal nå lage en konkret klasse av Form grensesnitt som vil bruke metoden fra Farge grensesnitt også:

offentlig klasse Square utvider Shape {public Square (Farge farge) {super (farge); } @ Override public String draw () {return "Square drawn." + Color.fill (); }}

For dette mønsteret vil følgende påstand være sant:

@Test offentlig ugyldig nårBridgePatternInvoked_thenConfigSuccess () {// en firkant med rød farge Shape square = new Square (new Red ()); assertEquals (kvadrat.draw (), "Kvadrat tegnet. Fargen er rød"); }

Her bruker vi bromønsteret og sender ønsket fargeobjekt. Som vi kan merke i utgangen, får formen tegninger med ønsket farge:

Firkantet tegnet. Farge: Rød trekant tegnet. Farge: Blå

3. Konklusjon

I denne artikkelen så vi på brodesignmønsteret. Dette er et godt valg i følgende tilfeller:

  • Når vi vil at en overordnet abstrakt klasse skal definere settet med grunnleggende regler, og de konkrete klassene skal legge til flere regler
  • Når vi har en abstrakt klasse som har en referanse til objektene, og den har abstrakte metoder som vil bli definert i hver av de konkrete klassene

Hele kildekoden for dette eksemplet er tilgjengelig på GitHub.